正则表达式匹配整个字符串,仅此而已

Posted

技术标签:

【中文标题】正则表达式匹配整个字符串,仅此而已【英文标题】:Regex matching the entire string and nothing else 【发布时间】:2021-10-09 06:08:47 【问题描述】:

我正在尝试使用正则表达式匹配字符串TF8/Z2IF。我只想匹配那个字符串而不是别的。我在匹配其他类似字符串TF8/Z2IFPP1TF8/Z2IF时遇到问题。有人可以告诉我如何只匹配TF8/Z2IF吗?

【问题讨论】:

使用开始和结束标记:^TF8/Z2IF$。但更好的是,如果您想要完全匹配,为什么不直接使用 C# 字符串相等? 使用正则表达式也将比 c# 中的直接字符串比较慢得多 那么为什么在测试时不起作用。如果它在这个网站上尝试 ^$ 它不起作用regexr.com 您需要更明确地说明什么在 regexr 上不起作用 - 保存您失败的尝试并发布直接链接。我们无法对“我尝试了你所说的但没有用”做任何事情 - 但我会犯“你可能误解或无法实施我们所说的”的错误(因为如果我们'我犯了一个错误,我们中的一个人现在会纠正我们的????) 【参考方案1】:

您可能忘记将^ 放在模式的开头,将$ 放在模式的末尾..

..但如果您要搜索确切的字符串,只需使用 ==.Equals - 正则表达式对性能造成不必要的影响。

如果您的意思是您有一个充满单词的文档并且想要“整个单词”样式搜索,请在模式前后使用\b

var input = "This is a test that is testing latest regex attempts";
var r = new Regex(@"\btest\b");
r.IsMatch(input); //true

input = "Now I attest we're testing non whole word tests";
r.IsMatch(input); //false 

\b 表示“单词边界”,在概念上是“输入的开头”、“空格”、“标点符号”等,因此放在“test”的开头和结尾意味着如果文档包含“test " 匹配但不匹配 "attest" 或 "testing"

【讨论】:

@arne 在 C# 中使用 var 在语法上是有效的,并且可以从赋值的右侧轻松推断出变量类型

以上是关于正则表达式匹配整个字符串,仅此而已的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式。匹配整个单词

正则表达式:如何在捕获单个组时匹配整个字符串 [重复]

正则表达式匹配整个字符串

如何将整个字符串匹配为具有单个正则表达式的两种格式之一?

正则表达式总结

正则表达式匹配规则