我想找到匹配:
\024jack3hall2\c$
\024jack3hall02\c$
\024jack3hall12\c$
但不适用于:
\024jack3hall023\c$
差异是结束部分的位数。我只想要一个或两个,而不是三个。
我的尝试:
\\\\024[a-zA-Z0-9]+[0-9]{1,2}\\[a-zA-Z]{1}\$(?!.)
字符串
我只在http://regexr.com/上尝试过,但将在C#中实现。
是否可以编辑我的尝试,或者我必须写几个单独的检查?为什么
{1,2}
型
不工作?\024jack3hall12343\c$也匹配,
4条答案
按热度按时间mzsu5hc01#
从 * 您所展示的示例 * 中,可以看到如下简单的内容:
字符串
应该有用。它将匹配1或2个数字,然后是
\
,只要它没有被另一个数字继续。如果需要,匹配的数字位于捕获组中(如果不需要,也可以删除方括号)。至于你最初的努力,就在这里:
型
您正在匹配范围
a-z
、A-Z
或0-9
中的1个或多个。所以如果你的多余的数字出现在这个模式的末尾,它就会和你的多余的数字相匹配。w8ntj3qf2#
答:
字符串
anauzrmj3#
我相信你没有正确地转义反斜杠。下面是正确的正则表达式:
字符串
zpqajqem4#
字符串
因此,要匹配一个或两个数字,而不是三个数字,您可以使用
(?<!\d)\d{1,2}(?!\d)
或仅ASCII版本(?<![0-9])[0-9]{1,2}(?![0-9])
。当然,如果数字模式之前或之后有非数字匹配模式,则不需要这些边界。例如
[a-zA-Z]+\d{min,max}\s+\w+
。当然,[a-zA-Z]
和\s
都不匹配数字,因此与\d{min,max}
匹配的数字数量被安全地限制在指定的值内。现在,当前OP解决方案如下所示
型
第一个确保了正确的数字数量,因为
[a-zA-Z0-9]+
(一个或多个字母或数字)被转换为[a-zA-Z0-9]*[a-zA-Z]
(零个或多个字母或数字,然后是一个字母)。参见regex demo。第二个使用左侧数字边界
(?<![0-9])
。请注意,(?<!\d)
也可以安全地在这里使用。没有必要使用右手数字边界,因为\\
模式只匹配反斜杠(不能匹配数字)。参见regex demo。