正则表达式在字符串中找到一个或两个数字但不是三个数字

时间:2016-06-02 19:14:53

标签: c# regex

我想找到匹配:
\ 024jack3hall的 2 \ C $
\ 024jack3hall的 02 \ C $
\ 024jack3hall的 12 \ C $

但不适用于:
\ 024jack3hall的 023 \ C $

差异是结尾部分的位数。我想只有1或2,而不是3 我的尝试:

 \\\\024[a-zA-Z0-9]+[0-9]{1,2}\\[a-zA-Z]{1}\$(?!.)

我只在http://regexr.com/上尝试过,但会在C#中实现 是否可以编辑我的尝试,或者我必须编写几个单独的检查? 为什么是

 {1,2}

不工作? \ 024jack3hall 12343 \ c $也匹配,

3 个答案:

答案 0 :(得分:4)

来自您展示的示例,简单如下:

[^\d](\d{1,2})\\

应该有效。它将匹配1或2位数字后跟\,只要它不是由另一个数字继续。 如果您需要,匹配的数字位于捕获组中(或者如果您不需要,则可以删除括号。)

至于你最初的努力,就在这里:

\\\\024[a-zA-Z0-9]+[0-9]{1,2}

您匹配范围a-zA-Z 0-9中的一个或多个。如果它们出现在该模式的末尾,那么这将匹配您的额外数字。

答案 1 :(得分:0)

答案:

\\\\024[a-zA-Z0-9]+[^\d](\d{1,2})\\[a-zA-Z]{1}\$(?!.)

答案 2 :(得分:0)

我相信你没有正确地逃避反斜杠。 这是正确的正则表达式:

\\024[a-zA-Z0-9]+[0-9]{1,2}\\[a-zA-Z]{1}\$(?!.)