试图用regex解析逗号分隔行,但得到的结果不一致:
Regex:([^,]*),?
实际值在匹配组1中(不包括逗号)。
预期成果:
a,,b -> 3 matches
a,,b, -> 4 matches
a,,,b -> 4 matches匹配数是逗号+ 1的数目。
问题是正则表达式在末尾匹配,即使没有逗号,所以获取:
a,,b -> 4 matches
a,,b, -> 4 matches两者都返回4个匹配项,尽管这些行有不同的值。
是否可以修正正则表达式,那么匹配的数目是值(逗号+ 1)的数目,而不需要修改代码中的结果?
发布于 2017-11-14 22:41:47
简介
您的正则表达式似乎没有匹配某些位置的任何字符,而是作为一种断言(断言组中没有匹配字符,并且后面没有逗号,,根据正则表达式,这是完全有效的)。
这个答案是一个补丁,允许您匹配任何非逗号,字符中的一个或多个字符,或者在断言位置前面有逗号,时对零宽度匹配的断言。
最好的方法是使用string函数在,上拆分字符串,但是这个方法也能工作。
代码
([^,\v]+|(?<=,))(?=,|$)解释
([^,\v]+|(?<=,))将下列任一项捕获到第1组中[^,\v]+匹配集合,\v中没有出现的任何字符中的一个或多个。这将匹配逗号,,或者垂直空格字符\v (例如换行符)。(?<=,)匹配上一个标记(使用正向后查找)是逗号,的位置。
(?=,|$)积极展望,以确保下面的内容实际上是逗号,或字符串$的结尾https://stackoverflow.com/questions/47296146
复制相似问题