C# 如何将整个字符串与正则表达式匹配?
我需要一个正则表达式,它只能在整个字符串与我的查询匹配的地方找到匹配项 例如,如果我搜索名为“红色十月”的电影,我只想匹配确切的标题(不区分大小写),但不匹配像“寻找红色十月”这样的标题。我不太确定我知道怎么做。有人知道吗C# 如何将整个字符串与正则表达式匹配?,c#,.net,regex,C#,.net,Regex,我需要一个正则表达式,它只能在整个字符串与我的查询匹配的地方找到匹配项 例如,如果我搜索名为“红色十月”的电影,我只想匹配确切的标题(不区分大小写),但不匹配像“寻找红色十月”这样的标题。我不太确定我知道怎么做。有人知道吗 谢谢 对不起,这有点不清楚 从我读到的,你想做简单的字符串比较。你不需要正则表达式 string myTest = "Red October"; bool isMatch = (myTest.ToLower() == "Red October".ToLower()); Con
谢谢 对不起,这有点不清楚 从我读到的,你想做简单的字符串比较。你不需要正则表达式
string myTest = "Red October";
bool isMatch = (myTest.ToLower() == "Red October".ToLower());
Console.WriteLine(isMatch);
isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
您需要将正则表达式括在
^
(字符串开头)和$
(字符串结尾)中:
请尝试以下正则表达式:
^Red October$
默认情况下,正则表达式区分大小写。
^
标记匹配文本的开始,而$
标记匹配文本的结束。使用^
和$
修饰符表示正则表达式模式相对于字符串的开始和结束的位置:
Regex.Match("Red October", "^Red October$"); // pass
Regex.Match("The Hunt for Red October", "^Red October$"); // fail
通常,对于默认设置,
^
和$
锚定是确保正则表达式匹配整个字符串的好方法
不过,有几点需要注意:
如果您的正则表达式中有替换项,请确保在使用^
和$
将正则表达式包围在非捕获组中:
^foo|bar$
当然不同于
^(?:foo|bar)$
此外,如果设置了某些选项,^
和$
可能具有不同的含义(行的开始/结束,而不是字符串的开始/结束)。在支持正则表达式的文本编辑器中,这通常是默认行为。在某些语言中,尤其是在Ruby中,这种行为甚至无法关闭
因此,有另一组锚固件保证仅在整个管柱的起点/终点匹配:
\A
在字符串开头匹配
\Z
在字符串末尾或最后一个换行符之前匹配
\z
在字符串的最末端匹配
但并不是所有语言都支持这些锚,最著名的是JavaScript。我知道回答这个问题可能有点晚,但可能对其他人来说会很方便 最简单的方法:
var someString = "...";
var someRegex = "...";
var match = Regex.Match(someString , someRegex );
if(match.Success && match.Value.Length == someString.Length){
//pass
} else {
//fail
}
如果我只想捕捉字符串中字母减去a的一次,并且可以使用myRegex.IsMatch()进行检查,则可以这样做
^[^e][e]{1}[^e]$对于简单的
字符串。包含的将起作用的东西,为什么需要正则表达式?我需要使用正则表达式的原因是我在MongoDB中使用它进行搜索,并且我需要它不区分大小写,这只能用正则表达式完成为什么不转换(动态)db data to lowercase and user lowercase string for search?@macias我不认为这是一个更好的选择,但不幸的是,我目前的情况不允许这样做。仅供参考,如果不需要使用正则表达式,只需尝试比较两个字符串而忽略大小写,只需执行string1.Equals(string2,StringComparison.OrdinalIgnoreCase)代码>我需要使用正则表达式的原因是我在MongoDB中使用它进行搜索,并且我需要它不区分大小写,因为它只能用正则表达式来完成。这是最有用的答案一个有趣的点我在这里看到它后才意识到:?:
表示括号不算作捕获组(因此它们不会影响现有正则表达式中的任何现有组号)。如果您正在使用的正则表达式的风格不支持这一点,您可以选择使用“向后看”和“向前看”(也是非捕获):(?IMHO这比公认的答案要简单。但这是一种替代方法。我喜欢这个答案,因为代码本身显示了预期的行为,而不是修改正则表达式(如果有人看了看代码,对regex不太了解,这可能就不太清楚了)。潜在的问题是,可以编写正则表达式,以便它可以匹配整个字符串或其中的一部分,而regex.match函数返回部分匹配,即使可能完全匹配。仅供参考,值得一提的是,为了使其不区分大小写,在创建regex对象时,添加第二个参数RegexOptions.IgnoreCase。如果该字符串周围有任何其他内容,则此操作将失败。例如,如果您在街上搜索“St”,但在同一行中有其他字符串也以“St”开头,例如名称“Stirling”这个正则表达式不会完全匹配。不幸的是,我不确定正则表达式是否是这个场景的正确答案。我将继续尝试。Tim下面的答案是好的,但不是所有引擎都支持这一点。实际上,$
并不总是匹配字符串的结尾,\z
会匹配(\z
在Python中是等效的)。请看。但JavaScript也是如此。
var someString = "...";
var someRegex = "...";
var match = Regex.Match(someString , someRegex );
if(match.Success && match.Value.Length == someString.Length){
//pass
} else {
//fail
}