regex - 正则表达式 (PCRE) 匹配单词之间的单词
问题描述
你好!我对正确的 PCRE 表达式有疑问。示例文本中需要加粗的单词(动物名称):
这种动物叫河马,能战胜的就是河马,能战胜的也就是河马,能战胜的就是河马,能战胜的就是河马, 这种动物叫灰兔,不能战胜的 动物叫小灰兔只能克服 这是一个考验。动物叫小灰兔,能战胜的不过是
这是我所做的表达。不幸的是,我无法使其正常工作,请帮助。{1,3} 量词如果可能需要替换为 * (匹配 0 个或多个前面的标记。)
(^|called )\K([a-z]* ?){1,3}(?=( and)? can overcome)
解决方案
您可以使用
(?:^|called\s+)\K[A-Z][a-z]*(?:\s+[A-Z][a-z]*)*?(?=(?:\s+and)?\s+can\s+overcome)
请参阅正则表达式演示。详情:
(?:^|called\s+)
- 字符串开头 orcalled
和一个或多个空格\K
- 匹配重置运算符[A-Z][a-z]*
- 一个大写字母和零个或多个小写字母(?:\s+[A-Z][a-z]*)*?
- 零个或多个,但尽可能少地出现一个或多个空格、一个大写字母,然后是零个或多个小写字母(?=(?:\s+and)?\s+can\s+overcome)
- 与紧随其后的位置匹配的正向前瞻(?:\s+and)?
- 零个或多个空格的可选出现和and
\s+can\s+overcome
- 零个或多个空格,can
, 零个或多个空格,overcome
.
推荐阅读
- mysql - 执行时间长。我要索引什么?
- python-3.x - smtplib.SMTP('smtp.office365.com', 587) 挂在 Windows Server 2012 上
- java - Java-Classnames 中前缀 I 的含义
- c# - API POST 请求“变成”GET 请求(Azure AD)
- delphi-7 - Delphi 7:如何在 TMemo 框中插入一行到 TEdit
- c# - 在 C# 中传递 List 元素
- javascript - 长文本溢出到 HTML/CSS 中的下一个组件
- angular - 有没有办法在 Kendo Grid for Angular 中有 2 个选定行的集合
- google-bigquery - 我正在寻找访问过这两个地点(圣克拉拉,米尔皮塔斯)的客户
- r - R-studio 中的循环