C# NET正则表达式:{1}不工作
这输出它是匹配的,但不应该 为什么{1}不工作C# NET正则表达式:{1}不工作,c#,regex,C#,Regex,这输出它是匹配的,但不应该 为什么{1}不工作 在-I之后,我要显式地使用1个字符0或1或2或。。。或9或K图案未锚定到字符串末端。试一试 if (!Regex.IsMatch("1234567-8A","[0123456789]+-[0123456789K]{1}")) Console.WriteLine("It is not match"); else Console.WriteLine("It is match"); 编辑:或 !Regex.IsMatch("123456
在-I之后,我要显式地使用1个字符0或1或2或。。。或9或K图案未锚定到字符串末端。试一试
if (!Regex.IsMatch("1234567-8A","[0123456789]+-[0123456789K]{1}"))
Console.WriteLine("It is not match");
else
Console.WriteLine("It is match");
编辑:或
!Regex.IsMatch("1234567-8A","[0123456789]+-[0123456789K]$")
锚定到起点和终点以匹配整个字符串
关于{1},不需要的原因是字符类[0123456789K]已经表示匹配此列表中的一个字符。添加{1}并不会改变这一点,即匹配列表中的一个字符,后面没有其他字符。你需要一个$anchor
有关图案中锚定的信息,请参见。图案未锚定到字符串的末端。试一试
if (!Regex.IsMatch("1234567-8A","[0123456789]+-[0123456789K]{1}"))
Console.WriteLine("It is not match");
else
Console.WriteLine("It is match");
编辑:或
!Regex.IsMatch("1234567-8A","[0123456789]+-[0123456789K]$")
锚定到起点和终点以匹配整个字符串
关于{1},不需要的原因是字符类[0123456789K]已经表示匹配此列表中的一个字符。添加{1}并不会改变这一点,即匹配列表中的一个字符,后面没有其他字符。你需要一个$anchor
有关模式中锚的信息,请参阅。您的正则表达式匹配,因为它是匹配的。您没有指定这是字符串的结尾,测试字符串的结尾确实有一个数字。请尝试以下方法:
!Regex.IsMatch("1234567-8A","^[0123456789]+-[0123456789K]$")
$表示字符串的结尾
或者更好的是,也可以使用“^”作为字符串的开头:
[0123456789]+-[0123456789K]{1}$
您的正则表达式匹配,因为它是匹配的。您没有指定这是字符串的结尾,测试字符串的结尾确实有一个数字。请尝试以下方法:
!Regex.IsMatch("1234567-8A","^[0123456789]+-[0123456789K]$")
$表示字符串的结尾
或者更好的是,也可以使用“^”作为字符串的开头:
[0123456789]+-[0123456789K]{1}$
作为旁注,您可以这样编写您的模式:
^[0123456789]+-[0123456789K]{1}$
作为旁注,您可以这样编写您的模式:
^[0123456789]+-[0123456789K]{1}$
不需要正则表达式:
^[0-9]+-[0-9K]$
不需要正则表达式:
^[0-9]+-[0-9K]$
你可以用\d代替[0123456789],顺便说一下,{1}什么都不做。你可以完全省略{1}。你可以用\d代替[0123456789],顺便说一下,{1}什么都不做。你可以完全省略{1},顺便说一句,你的测试字符串的末尾确实有一个位数……这是怎么回事?@sports它与1234567-8匹配。如果没有锚,则不需要匹配整个输入字符串。@sports:您的字符串是1234567-8A。在-后面有一个数字,这是您的正则表达式所匹配的。它不关心字符串A的其余部分,因为您没有告诉它要关心它。而且您的测试字符串的末尾确实有一个位数……这是怎么回事?@sports It与1234567-8匹配。如果没有锚,则不需要匹配整个输入字符串。@sports:您的字符串是1234567-8A。在-后面有一个数字,这是您的正则表达式所匹配的。它不关心字符串A的其余部分,因为您没有告诉它要关心它。这样会更快吗?不,那样快吗?无自动机