【问题标题】:Regex how to check word boundary conditions unicode正则表达式如何检查单词边界条件unicode
【发布时间】:2012-08-03 07:08:00
【问题描述】:

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

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

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

一个例子,

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

和例句是:

这是测试,字符串 -- Result - true

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

这是测试--结果-错误

测试——结果——真

【问题讨论】:

    标签: c# regex


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      如果您想让 C# 中的表达式不区分大小写,您必须使用标志 RegexOptions.IgnoreCase,如下例所示:

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

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

      【讨论】:

      • 感谢迭戈的回复。您介意详细说明正则表达式吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2011-03-28
      • 2014-06-07
      • 2012-09-24
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多