字符串的正则表达式以数字开头,后跟 + 字符

Posted

技术标签:

【中文标题】字符串的正则表达式以数字开头,后跟 + 字符【英文标题】:RegEx for string starts with number and followed by + character 【发布时间】:2021-11-04 10:24:30 【问题描述】:

我想要这样的输入的正则表达式:

1+2
3
1+22+3

但是如果我写以下输入,那么它不应该允许。比如;

+1+2
1+
a+1+b+c
12+

字符串必须以数字开头,后跟+ 字符。但在 + 字符之后,它必须是任意数字。 我试过这个[^0-9][^+]?,但是我用我写的正则表达式删除了+ 符号,但是有一个问题。在删除+ 字符的同时,它也会删除它旁边的数字。此事件不断重复。

我该怎么做?

【问题讨论】:

通常像^[0-9]+(?:\+[0-9]+)*$ 这样的东西会起作用。请注意,对于.NET,如果我没记错的话,您宁愿具体说明数字以避免其他语言的数字,除非您另有说明。 @JvdV 你可以发布它:-) @Thefourthbird,我不确定,因为其他答案似乎很受欢迎。也许我误解了这个问题。 @JvdV 发布的答案可能是一个很好的答案,但请注意它提供了部分匹配,并且在重复中仅匹配单个数字。 regex101.com/r/IsKBGJ/1 如果没有锚点,您也可以将模式写为 (?<!\S)[0-9]+(?:\+[0-9]+)*(?!\S) 【参考方案1】:

请尝试:

\d+(\+\d)*

演示:https://regex101.com/r/hfqmYr/2

地点:

\d -> 匹配任意数字

+ -> 匹配一个符号一次或多次

* -> 匹配一个符号 0 次或多次

【讨论】:

对于 1 或更多的数字,您需要 + 而不是 * 来覆盖最小的二进制运算表达式。 同意!!谢谢@vendettamit【参考方案2】:

如 cmets 中所述,看起来您可以使用:

^[0-9]+(?:\+[0-9]+)*$

这是为了允许提到的示例数据并丢弃那些您不想允许的数据。请参阅在线demo。模式匹配:

^ - 起始线锚点。 [0-9]+ - 1+ 位 (ASCII)。 (?:\+[0-9]+)* - 0+ 乘以非捕获组以允许文字加号后跟 1+ 位 (ASCII)。 $ - 结束线锚。

据我所知,.NET 要求您明确提及这些 ASCII 数字以避免匹配来自其他语言的数字(除非使用 ECMAScript 选项另外指定)。

【讨论】:

以上是关于字符串的正则表达式以数字开头,后跟 + 字符的主要内容,如果未能解决你的问题,请参考以下文章

搜索 2 个特定字母后跟 4 个数字 Regex

Java 判断以数字开头的字符串的正则表达式怎么写?

数字字符串中单个字母字符的正则表达式语法

关于grep后跟多个正则查询条件的问题

检查字符串是不是以正则表达式数字开头

正则表达式:数字开头中间字母结尾数字