正则表达式从字符串中提取用逗号分隔的字符串

Posted

技术标签:

【中文标题】正则表达式从字符串中提取用逗号分隔的字符串【英文标题】:Regex to extract string separated by comma from a string 【发布时间】:2016-12-27 11:50:51 【问题描述】:

我想在与模式匹配后提取所有以逗号分隔的值(,)。

首先我将字符串与正则表达式匹配,然后使用Matcher 提取值。

Regex= \(([^)]+)\) 正确匹配后面的字符串,没有任何问题。

('A', '36254632546', 0, 'Test, test1', NULL) 

但当字符串convert(datetime, 'Dec 27 2016 10:36:54', 116) 在原始字符串中可用时无法匹配。我尝试通过将$ 放在最后来匹配最后一个),但似乎不起作用。

要匹配的字符串 = ('A', convert(datetime, 'Dec 27 2016 10:36:54', 116), 0, 'Test, test1', NULL)

【问题讨论】:

见How to match string within parentheses (nested) in Java?。此外,this snippet 可能会对您有所帮助。如果嵌套级别数是任意的,则不能使用正则表达式,因为 Java 正则表达式不支持递归。 您似乎在解析某种编程语言。您确定正则表达式能够匹配所有可能的输入吗? 请试试这个regex101.com 【参考方案1】:

这是因为您的正则表达式在第一个 ')' 处停止。

您在正则表达式中所说的是以 '(' 开始,然后将除 ')' 之外的所有内容分组,然后是 ')' 所以即使您在末尾放置美元符号,它也会停止,因为结尾不在那里,您之后还有剩余的字符串第一个')'。

“+”号表示连续字符。

如果你想匹配所有的字符串,你必须告诉类似

\\(([^)]+\\)[^)]+)\\);

但这与你程序的逻辑有关。

此外,如果您想要多组逗号,则必须更改您的正则表达式,以便这些组是逗号组。

【讨论】:

以上是关于正则表达式从字符串中提取用逗号分隔的字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式的逗号分隔字符串到数组

C# 正则表达式在 外用逗号分隔

ruby Amazon ASIN正则表达式和Ruby用于从逗号分隔或换行符分隔的textarea中提取asins

通过正则表达式获取逗号分隔的数字

优化逗号分隔值正则表达式

用于从封闭字符串中提取 IP 地址和端口的简单 Java 正则表达式