Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将整个字符串与正则表达式匹配?_C#_.net_Regex - Fatal编程技术网

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
}