首页 > 解决方案 > 如何匹配可能被附加字符、数字或特殊字符包围的字符串?

问题描述

我正在准备标记的训练数据来训练 spaCy 模型来检测某些命名实体。为此,我使用了一堆现有的会议记录并在其上运行我的正则表达式提取。它可以很好地提取训练数据。当我训练模型时,我有时会遇到 spaCy 训练函数抱怨的问题(估计为 10 - 15%):某些实体无法在文本中对齐。当我查看示例时,有时会出现问题,例如“-”或数字或数字后跟“i”之类的附加字符,或者如果注释指的是多个实体,则末尾仅添加了一个“s”:这里有些例子:

这是我检测测试的正则表达式的一部分。

|(test?(\s)?[0-9]{3,4}\w+)|(test?(\s)?\w+)|

我认为已经有一种比使用 ors 更聪明的方法 |...

如何使用正则表达式始终匹配整个字符串?

标签: regex

解决方案


要获取示例数据中的匹配项,您可以使用

-?\btests?\s?(?:[^\W\d]*\d{3,4})?[^\W\d]*

模式匹配:

  • -?匹配可选-
  • \btests?匹配测试或前面有单词边界的测试
  • \s?匹配一个空格字符
  • (?:非捕获组
    • [^\W\d]*匹配除数字之外的可选单词字符
    • \d{3,4}匹配 3 或 4 位数字
  • )?关闭非捕获组并使其可选
  • [^\W\d]*匹配除数字之外的可选单词字符

正则表达式演示


推荐阅读