正则表达混淆

时间:2010-12-13 06:14:57

标签: c# regex

我想使用正则表达式检查名称,但我没有得到令人信服的结果。任何人都可以建议我在正则表达式模式中做错了什么?

foreach(Match m in
(Regex.Matches("Jack_Sparrow","^[A-za-z]+[^-]*(\\d)*$")))
     { 
      Console.WriteLine("{0} found at index{1}",m.Value,m.Index);
     }

我可以知道为什么我将 Jack_Sparrow 作为输出,尽管没有检查模式中的下划线(_)?我宁愿 Jack Sparrow 作为输出。我需要什么修改?

3 个答案:

答案 0 :(得分:1)

[^-]检查除 - 之外的任何字符,以便与下划线匹配。我不确定你想在这里找到什么。

您是否尝试将字母以外的所有内容更改为空格?

答案 1 :(得分:1)

角色范围的前半部分包括它。

[A-za-z]创建一个范围,从大写字母A到小写字母z,然后是从小写字母a到小写字母z的另一个范围。由于ASCII值的计算方式,这些范围在第二部分重叠。具体来说,A-z创建从ASCII字符65(A)到字符122(z)的范围。下划线字符的值为95,介于两者之间。由于您的正则表达式已锚定,因此此字符类is where the match is occurring。我已经更改了你的角色类,在这个例子中包括分组括号,这样你就可以看到它正在捕获“Jack_Sparrow”的整个文本。

您应该可以通过将字符范围更改为[A-Za-z]来解决此特定匹配。但是,它仍将匹配第一部分(“杰克”),然后[^-]*部分将匹配字符串的其余部分(“_Sparrow”),仍然使其成为有效匹配。如果您可以提供其他一些文本示例,那么我们可以帮助您进一步完善此示例。根据您提供的最新信息,很难说明如何最好地解决[^-]问题。

答案 2 :(得分:0)

foreach(匹配m in (Regex.Matches(“Jack_Sparrow”,“[^ A-Za-z]”))      {       Console.WriteLine(“{0}在索引{1}处找到”,m.Value,m.Index);      }

相关问题