字符串的正则表达式以数字开头,后跟 + 字符
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 选项另外指定)。
【讨论】:
以上是关于字符串的正则表达式以数字开头,后跟 + 字符的主要内容,如果未能解决你的问题,请参考以下文章