首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用regex正确解析逗号分隔行

如何用regex正确解析逗号分隔行
EN

Stack Overflow用户
提问于 2017-11-14 22:15:27
回答 1查看 126关注 0票数 0

试图用regex解析逗号分隔行,但得到的结果不一致:

Regex:([^,]*),?

实际值在匹配组1中(不包括逗号)。

预期成果:

代码语言:javascript
复制
a,,b  -> 3 matches
a,,b, -> 4 matches
a,,,b -> 4 matches

匹配数是逗号+ 1的数目。

问题是正则表达式在末尾匹配,即使没有逗号,所以获取:

代码语言:javascript
复制
a,,b  -> 4 matches
a,,b, -> 4 matches

两者都返回4个匹配项,尽管这些行有不同的值。

是否可以修正正则表达式,那么匹配的数目是值(逗号+ 1)的数目,而不需要修改代码中的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 22:41:47

简介

您的正则表达式似乎没有匹配某些位置的任何字符,而是作为一种断言(断言组中没有匹配字符,并且后面没有逗号,,根据正则表达式,这是完全有效的)。

这个答案是一个补丁,允许您匹配任何非逗号,字符中的一个或多个字符,或者在断言位置前面有逗号,时对零宽度匹配的断言。

最好的方法是使用string函数在,上拆分字符串,但是这个方法也能工作。

代码

参见此处使用的regex

代码语言:javascript
复制
([^,\v]+|(?<=,))(?=,|$)

解释

  • ([^,\v]+|(?<=,))将下列任一项捕获到第1组中
    • [^,\v]+匹配集合,\v中没有出现的任何字符中的一个或多个。这将匹配逗号,,或者垂直空格字符\v (例如换行符)。
    • (?<=,)匹配上一个标记(使用正向后查找)是逗号,的位置。

  • (?=,|$)积极展望,以确保下面的内容实际上是逗号,或字符串$的结尾
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47296146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档