C# 为什么;[“与[a-zA-Z]匹配]

C# 为什么;[“与[a-zA-Z]匹配],c#,regex,character-class,C#,Regex,Character Class,输出: 种皮 试验[ 测试B 问题:为什么在输出中测试[?字符类[a-zA-Z]应该只匹配字母字符a到Z和a到Z。因为[属于a-Z,所以将char类中的a-Z更改为a-Z Regex oRegex = new Regex(@"test[a-zA-z]"); string st = @"this is a test1 and testA and test[abc] another testB and test(xyz) again."; foreach(Match match in oRegex.

输出

种皮

试验[

测试B


问题:为什么
在输出中测试[
?字符类[a-zA-Z]应该只匹配字母字符a到Z和a到Z。

因为
[
属于
a-Z
,所以将char类中的
a-Z
更改为
a-Z

Regex oRegex = new Regex(@"test[a-zA-z]");
string st = @"this is a test1 and testA and test[abc] another testB and test(xyz) again.";
foreach(Match match in oRegex.Matches(st))
{
     Console.WriteLine(match.Value);
}

您的正则表达式中有一个输入错误。
[a-zA-z]
应该是
[a-zA-z]


字符
[
位于
A
z
字符之间。

z在您的情况下是打字错误。更改此
[A-zA-z]

Regex oRegex = new Regex(@"test[a-zA-Z]");

谢谢大家指出错误。在某种程度上,错误帮助我理解了a-z范围。这有助于我进一步解释为什么“[”包含在A-z范围内。@Blorgbeard我是第一个发布此答案的人。为什么您的帖子在单击最旧的选项卡时首先显示?@AvinashRaj不确定。我的帖子现在已被接受,因此它将始终显示在第一位。您可以将鼠标悬停在“2小时前”上查看时间戳-看起来您比我快了10秒:)
Regex oRegex = new Regex(@"test[a-zA-Z]");