我需要一个只能找到整个字符串与我的查询匹配的匹配的正则表达式。
例如,如果我搜索名为“Red October”的电影,我只想匹配那个确切的标题(不区分大小写),但不匹配“The Hunt For Red October”等标题。不太确定我知道怎么做。有人知道吗?
谢谢!
答案 0 :(得分:88)
尝试以下正则表达式:
^Red October$
默认情况下,正则表达式区分大小写。 ^
标记匹配文本的开头,$
结束。
答案 1 :(得分:30)
通常,使用默认设置,^
和$
锚点是确保正则表达式匹配整个字符串的好方法。
但有几点需要注意:
如果您的正则表达式中有替换,请务必将正则表达式括在非捕获组中,然后使用^
和$
围绕它:
^foo|bar$
当然与
不同^(?:foo|bar)$
此外,^
和$
可以采用不同的含义(行的开头/结尾而不是字符串的开头/结尾)如果设置了某些选项。在支持正则表达式的文本编辑器中,这通常是默认行为。在某些语言中,尤其是Ruby,甚至无法关闭此行为。
因此,有另一组锚点保证只匹配整个字符串的开头/结尾:
\A
匹配字符串的开头。
\Z
匹配字符串末尾或最后一个换行符之前。
\z
匹配字符串的最后一部分。
但并非所有语言都支持这些锚点,尤其是JavaScript。
答案 2 :(得分:17)
使用^
和$
修饰符来表示正则表达式模式相对于字符串开头和结尾的位置:
Regex.Match("Red October", "^Red October$"); // pass
Regex.Match("The Hunt for Red October", "^Red October$"); // fail
答案 3 :(得分:8)
您需要将正则表达式括在^
(字符串的开头)和$
(字符串的结尾)中:
^Red October$
答案 4 :(得分:4)
我知道回答这个问题可能有点迟,但也许对其他人来说会很方便。
最简单的方法:
var someString = "...";
var someRegex = "...";
var match = Regex.Match(someString , someRegex );
if(match.Success && match.Value.Length == someString.Length){
//pass
} else {
//fail
}
答案 5 :(得分:1)
很抱歉,但有点不清楚。
从我读到的,你想做简单的字符串比较。你不需要正则表达式。
string myTest = "Red October";
bool isMatch = (myTest.ToLower() == "Red October".ToLower());
Console.WriteLine(isMatch);
isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
答案 6 :(得分:0)
匹配整个字符串可以使用^
和$
完成,如前面的答案中所述。
为了使正则表达式不区分大小写,您可以实现涉及字符类的hack。一个很多的角色类。
^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$
答案 7 :(得分:-1)
你可以这样做,例如,如果我只想抓住一次字母减去一个字母的字母,可以用myRegex.IsMatch()
来检查^ [^ E]的并[e] {1} [^ E] $