首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果后面没有-ing单词,则匹配“后”

如果后面没有-ing单词,则匹配“后”
EN

Stack Overflow用户
提问于 2021-10-23 05:51:12
回答 2查看 57关注 0票数 3

如果在After后面没有-ing单词(在逗号之前),我想匹配它。因此,在-ing和逗号之间不应该有一个After单词。

所需匹配(粗体):

坐下后,他开始说话。 他终于坐下来,开始说话了。 坐下后,开始说话。

我以为这个雷吉会做到的:

代码语言:javascript
复制
\bAfter\b.*(?!\w+ing)+,

但是,如果后面没有-ing单词,它也是匹配的:

坐下后,开始说话。 终于坐下来了,开始说话了。 坐下后,开始说话。

https://regexr.com/683bv

这是为什么,以及如何解决它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-23 05:57:15

试试这个正则表达式

只匹配After中的句子和逗号,在wo之后没有-ing的单词

只是.+的一个惰性量化符(在regex中代替了\w+)就能做到这一点。

\bAfter (?!.+?ing).*?,

(在第二个.*后面还有一个懒惰的量词,以防同一个句子中有两个逗号)

输出:

Regex101演示

告诉我如果这不适合你..。

票数 1
EN

Stack Overflow用户

发布于 2021-10-23 07:06:07

你尝试过的模式:

  • 使用.*将首先匹配整行,然后它将回溯到匹配第一个遇到的逗号,因此它也将匹配所有逗号之间。
  • 它可以匹配第一个遇到的逗号,因为这个部分(?!\w+ing),断言,从当前位置看,没有单词字符后面跟着ing,然后匹配一个,,但是\w不匹配逗号,所以断言将始终为真。

您可以使用否定字符类排除在负查找中匹配逗号,然后也可以匹配,直到逗号第一次出现。

代码语言:javascript
复制
\bAfter\b(?![^,\n]*ing)[^,\n]*,

在部分中,模式匹配:

  • \bAfter\b在单词边界之间匹配单词After
  • (?![^,\n]*ing)负前瞻断言从当前位置不交叉逗号就不会出现ing
  • [^,\n]*,匹配除逗号外的可选字符(如果不想跨行,则为换行符)

Regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69685503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档