我正在使用此方法尝试查找匹配项,例如:
Regex.Match("A2-TS-OIL", "TS-OIL", RegexOptions.IgnoreCase).Success;
我得到了一个真实的结果。我很迷惑。我认为这应该返回false,因为模式中没有特殊字符。如果我使用".+TS-OIL"
,则应返回true(任何.
和+
超过1)。我该怎么做才能得到我需要的东西?
答案 0 :(得分:11)
正则表达式匹配不必从输入开始处开始。你可能想要:
^TS-OIL
如果你想在开始时只匹配。或者:
^TS-OIL$
防止它与TS-OIL-123匹配。
^
匹配输入的开头,$匹配结束。
我相信有些地方会自动添加^
和$
(例如网络验证控件),但它们是个例外。
Regex.IsMatch(...)
在这种情况下可以节省一些按键。
答案 1 :(得分:5)
如果您只想在测试字符串以正则表达式开头时匹配,那么您需要指示:
Regex.Match("A2-TS-OIL", "^TS-OIL", RegexOptions.IgnoreCase).Success;
^
表示匹配必须从字符串的开头开始。
答案 2 :(得分:1)
在表达式字符串的开头和结尾有一个隐含的。*。你需要使用^和$代表字符串的开头和结尾来覆盖它。
答案 3 :(得分:0)
TS-OIL是A2-TS-OIL中的子串。所以,它会产生一个匹配。你有最简单的匹配 - 文字子串。如果你想要TS-OIL不匹配,你也可以尝试(?!^ A2 - )(TS-OIL),假设你不希望它以A2-开头,但是可能还需要其他东西。