【问题标题】: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)

标签: c# .net regex


【解决方案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 选项另外指定)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2015-05-14
    相关资源
    最近更新 更多