以数字开头并后跟“+”字符的字符串的正则表达式。

3
我需要一个针对以下输入的正则表达式:

1+2
3
1+22+3

但如果我输入以下内容,则不应允许。例如;
+1+2
1+
a+1+b+c
12+

字符串必须以数字开头,然后仅跟随+字符。但在+字符之后,它必须是任何数字。 我尝试过这个[^0-9][^+]?,但是由于我编写的正则表达式删除了起始处的+符号,所以出现了问题。在删除+字符时,它还会删除紧接其后的数字,这一事件不断重复。

我该如何做?


4
通常像 ^[0-9]+(?:\+[0-9]+)*$ 这样的正则表达式可以起作用。请注意,对于.NET来说,如果我没记错的话,你最好要具体指明数字以避免来自其他语言的数字,除非你另有说明。 - JvdV
1
@JvdV 你可以发布它 :-) - The fourth bird
@Thefourthbird,我不确定,因为另一个答案似乎更受欢迎。也许我误解了问题。 - JvdV
@JvdV 发布的答案可能是一个好答案,但请注意它只给出了部分匹配,并且在重复中仅匹配了一个数字。https://regex101.com/r/IsKBGJ/1 如果没有锚点,您也可以将模式编写为(?<!\S)[0-9]+(?:\+[0-9]+)*(?!\S) - The fourth bird
2个回答

6
请尝试:
\d+(\+\d)*

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

其中:

\d -> 匹配任何数字

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

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


1
你需要使用加号+而不是乘号*,以覆盖最小的二进制运算表达式中的1或更多数字。 - vendettamit
同意!!谢谢@vendettamit - hitesh bedre

2

正如评论中所提到的,看起来您可以使用:

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

这是为了允许所提到的样本数据并丢弃您不想允许的内容。请参见在线演示。模式匹配如下:
  • ^ - 行起始锚点。
  • [0-9]+ - 1个或多个数字(ASCII)。
  • (?:\+[0-9]+)* - 非捕获组,允许一个文字加号后跟1个或多个数字(ASCII),可以重复0次。
  • $ - 行结束锚点。
据我所知,.NET 要求您明确提及这些 ASCII 数字,以避免匹配其他语言的数字(除非使用 ECMAScript 选项另有规定)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接