我遇到了在C#中使用Regex匹配语句的问题
Statement: "When Not x Is Nothing"
Pattern: "When Not [\.0-9a-zA-Z_()]* Is Nothing"
此模式也与我不希望发生的声明"When x Is Nothing"
相匹配。
任何有关如何改进与预期声明匹配的建议都非常受欢迎。
答案 0 :(得分:2)
源:
var testStrings = new[]
{
"When Not x Is Nothing",
"When x Is Nothing",
};
var regex = new Regex("When Not [.0-9a-zA-Z_()]* Is Nothing");
foreach (var test in testStrings)
{
var match = regex.IsMatch(test);
String.Format("regex {0} matches string {1} ? {2}", regex, test, match).Dump();
}
结果:
正则表达式何时不是[.0-9a-zA-Z _()] *当不是x时,Nothing匹配字符串 没什么 ?真
正则表达式何时不是[.0-9a-zA-Z _()] *没有匹配 字符串当x什么都没有?假
答案 1 :(得分:2)
关于贬低的风险。这会将False
返回到控制台:
Regex rgx = new Regex(@"When Not [.0-9a-zA-Z_()]* Is Nothing");
Console.WriteLine(rgx.IsMatch("When x Is Nothing"));
所以我想
我个人会写:
Regex rgx = new Regex(@"^When Not [.0-9a-zA-Z_()]* Is Nothing$");
使其更安全,但我不知道您是匹配字符串还是正在搜索子字符串。