regex - 如何匹配可能被附加字符、数字或特殊字符包围的字符串?
问题描述
我正在准备标记的训练数据来训练 spaCy 模型来检测某些命名实体。为此,我使用了一堆现有的会议记录并在其上运行我的正则表达式提取。它可以很好地提取训练数据。当我训练模型时,我有时会遇到 spaCy 训练函数抱怨的问题(估计为 10 - 15%):某些实体无法在文本中对齐。当我查看示例时,有时会出现问题,例如“-”或数字或数字后跟“i”之类的附加字符,或者如果注释指的是多个实体,则末尾仅添加了一个“s”:这里有些例子:
- -测试
- 测试123
- 测试
- 测试2000i
- 测试 123
- 测试2000i
- -测试 test2000XPi
这是我检测测试的正则表达式的一部分。
|(test?(\s)?[0-9]{3,4}\w+)|(test?(\s)?\w+)|
我认为已经有一种比使用 ors 更聪明的方法 |...
如何使用正则表达式始终匹配整个字符串?
解决方案
要获取示例数据中的匹配项,您可以使用
-?\btests?\s?(?:[^\W\d]*\d{3,4})?[^\W\d]*
模式匹配:
-?
匹配可选-
\btests?
匹配测试或前面有单词边界的测试\s?
匹配一个空格字符(?:
非捕获组[^\W\d]*
匹配除数字之外的可选单词字符\d{3,4}
匹配 3 或 4 位数字
)?
关闭非捕获组并使其可选[^\W\d]*
匹配除数字之外的可选单词字符
推荐阅读
- java - 我们如何使用 iText7 从 html(包含 SVG)生成 PDF/A 或 PDF?
- xamarin - 将 Xamarin 表单应用程序更新到最新版本会停止编译
- python - 以 1 分钟的间隔时间计算行值的差异
- bash - 将文件夹路径作为参数从 Windows 批处理文件传递给 cygwin bash 脚本
- ssl - Windows Server 2008 r2 中的 SSL 证书错误
- javascript - 从 Javascript 运行 Java 方法
- php - PHP时间,包括第一天
- javascript - JSEncrypt 到 PHP 非对称加密
- html - 背景图片?
- r - 矩阵到 DF 转置 R