0

我正在尝试检查给定单词(例如matchword)是否在来自外部来源的句子中。目前在 C# 中,我计划使用下面的正则表达式模式来覆盖这些单词边界场景(匹配词应该是一个可以与所有可能的句子或断词字符分隔的单词)。matchword 可以在句子的开头/中间/结尾,有时也可以是字符串的完全匹配。

应涵盖多语言文本,且不区分大小写。

([\s+,"'\(\[])matchword([\s+;\?\.;,"'\)\]])

一个例子,

假设我的匹配词是“测试”(不带引号)

和例句是:

这是测试,字符串——结果——真

这是测试——结果——错误

这是testest——结果——假

测试——结果——真

4

2 回答 2

1

我想在您的情况下,消极的环顾可能就足够了:

(?<!\w)test(?!\w)

这意味着:单词 test 之前或之后没有 \w 字符。

如果要在 C# 中使表达式不区分大小写,则必须使用RegexOptions.IgnoreCase以下示例中的标志:

Regex.IsMatch(subjectString, @"(?<!\w)test(?!\w)", RegexOptions.IgnoreCase)

这里更好地解释了环视的全部内容。无论如何,在您的情况下,上述涉及的答案\b要好得多。只需将此概念视为您可能想要更深入地了解以更好地掌握正则表达式的东西。它的强大之处在于能够选择更复杂的表达式以包含在前瞻或后视组中。在你的情况下,这只是一种浪费。

于 2012-08-02T22:39:40.970 回答
1

尝试\btest\b其中\b表示单词的开头和结尾,或者您可以(?i)\btest\b使其不区分大小写

于 2012-08-02T22:43:18.107 回答