正则表达式匹配零和逗号

Posted

技术标签:

【中文标题】正则表达式匹配零和逗号【英文标题】:Regex to match Zero and Comma 【发布时间】:2018-01-22 15:16:22 【问题描述】:

我正在寻找将捕获以下文本的正则表达式字符串:

0, ,0,

我尝试了一些变体,但无济于事:

^[0,]+$

^[0,]

任何建议将不胜感激。

编辑: 这将在另一个使用 Perl 进行正则表达式模式匹配的程序中使用。该程序读取一个包含条目列表的文件。在程序中使用不同的配置文件,我需要选择如下所示的条目:

0, ,0,

这些条目也可以这样写:

1, ,0,

因此,我正在寻找的理想正则表达式将扫描“它是否以 1 或 0 开头,紧接着是逗号,然后是空格,然后是逗号,然后是数字 (0-9),并以逗号结尾。”

更多示例:

0, ,8,
1, ,5,

我希望这有助于澄清请求。

谢谢,

【问题讨论】:

如果该示例具有代表性,则您的问题是要求匹配单独一行。首先尝试删除^$,然后如果结果仍然不符合您的喜好,则可以改进您的问题。 您应该提供 几个 输入及其预期输出。 您打算使用哪种风格的正则表达式? 你的意思是捕获,还是仅仅匹配? 正如您从几个答案中看到的那样,您的示例中的空格是否是示例的一部分存在混淆。我假设您的标题是描述性的,并且 soaces 不是示例的一部分;但是你真的需要edit你的问题来明确和明确。 【参考方案1】:
(?:[0\s]+,)+

你的字符串中有一个空格,所以你需要 \s 来匹配它。

【讨论】:

【参考方案2】:

您的问题没有提到特定的正则表达式实现,因此您收到的答案可能不适合您。 (课程:始终指定您计划使用它的环境。)

在任何合理的现代正则表达式变体中,

[0,]+

匹配一个或多个字符的序列。字符类[abc] 匹配单个字符,该字符是方括号内的枚举字符之一,量词+ 表示尽可能多次匹配前面的表达式,但至少匹配一次。

匹配和捕获在某些实现中是独立的概念。也许你想在这个正则表达式周围添加括号来指定你想要捕获,而不仅仅是匹配,这个正则表达式描述的输入中的字符串(在某些实现中,你想添加一个标志 - 通常是 g - 到说你想要所有匹配,而不仅仅是第一个)。

【讨论】:

【参考方案3】:

正则表达式^(?:[0 ],)+$^(?:[0\s],)+$

详情

^ 断言字符串开头的位置 (?:)非捕获组 [] 匹配列表中存在的单个字符 + 匹配一次到无限次 $ 在字符串末尾断言位置 \s 匹配任何空白字符

Regex demo

【讨论】:

【参考方案4】:

您还需要使用\s 来捕获空格:

^[0,\s]+$

\s 将匹配所有空格字符,相当于[\r\n\t\f\v ]

在此处查看结果:https://regex101.com/r/g3faWA/1


如果要匹配包含 0 和逗号的部分,即使该行包含其他字符,也可以删除行分隔符(^$)。那将给出:

[0,\s]+

【讨论】:

以上是关于正则表达式匹配零和逗号的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配逗号不在分组符号之间

php 中文标点逗号‘,’怎么用正则匹配

使用正则表达式匹配多个逗号分隔的单词

什么正则表达式将匹配除逗号','或分号';'之外的每个字符?

用正则表达式匹配数字——只有数字和逗号

正则表达式匹配两个或多个逗号分隔的整数