我试图检查一个给定的单词(比如 matchword )是否来自外部来源的句子。在C#目前我打算使用下面的正则表达式模式来覆盖这些单词边界场景( matchword 应该是一个单词可以用所有可能的句子或单词分隔字符分隔)。 matchword可以在句子的开头/中间/结尾,或者有时它可以与字符串完全匹配。
应涵盖多语言文字,并且不区分大小写。
([\s+,"'\(\[])matchword([\s+;\?\.;,"'\)\]])
一个例子,
假设我的匹配字是“test”(没有引号)
和样本句子是:
这是test,string - Result - true
这是测试 - 结果 - 错误
这是testest - result - false
测试 - 结果 - 真实
答案 0 :(得分:1)
我认为在你的情况下负面的环顾四周可能就足够了:
(?<!\w)test(?!\w)
这意味着:单词test不在\ w字符之前或之后。
如果要在C#中使表达式不区分大小写,则必须使用以下示例中的标记RegexOptions.IgnoreCase
:
Regex.IsMatch(subjectString, @"(?<!\w)test(?!\w)", RegexOptions.IgnoreCase)
Here更好地解释了环顾四周。无论如何,涉及\b
的上述答案在您的情况下要好得多。只需将此概念视为您可能希望深入了解更好地掌握正则表达式的内容。它的强大之处在于能够选择更复杂的表达式以包含在前瞻或后瞻组中。在你的情况下,这只是一种浪费。
答案 1 :(得分:1)
尝试\btest\b
,其中 \ b 表示单词的开头和结尾,或者您可以(?i)\btest\b
使其不区分大小写