正则表达式非贪心词抓取
Regular expression non-greedy word capture
从以下字符串开始:
and worda1 worda2 ... wordan and wordb1 wordb2 ... wordbn
... 不是字面意思,而是意味着其他词也可以存在。这些词可以是 'and'.
之外的任何内容
我想捕捉
wordb1 wordb2 wordbn
到目前为止我写的正则表达式的问题是我使用了 \w,然后匹配 'and' 并导致贪婪捕获。向前看和向后看也不起作用,因为需要捕获任意数量的单词。
编辑:这是一个例子:
and everyone went to the park and nobody was left at home
应该捕获:
nobody was left at home
正则表达式无法对短语 "nobody was left at home" 进行硬编码,因为它需要捕获除 "and".
之外的任何任意单词序列
更好:
and it was morning and everyone went to the park and nobody was left at home
应该捕获:
nobody was left at home
总的来说,我只想捕获第一个 "and",从右边开始。
我可以编写一些代码来执行此操作,但想知道是否有正则表达式方法来执行此操作。
我正在使用 Python re,但对其他风格的正则表达式持开放态度。
感谢您的帮助。
应该这样做:
/(?:.* and )?(.+)/
请注意,这会匹配整行,但 捕获的匹配项 将是您想要的部分。一个工作示例是 here.
不过有一些注意事项:
- 假设每行一个句子。
- 如果其中没有单词 'and',这将匹配整行。也许这就是你想要的。
- 这假设该行的第一个词不是 'and'。
- 这还假设该行的最后一个字不是 'and'。
从以下字符串开始:
and worda1 worda2 ... wordan and wordb1 wordb2 ... wordbn
... 不是字面意思,而是意味着其他词也可以存在。这些词可以是 'and'.
之外的任何内容我想捕捉
wordb1 wordb2 wordbn
到目前为止我写的正则表达式的问题是我使用了 \w,然后匹配 'and' 并导致贪婪捕获。向前看和向后看也不起作用,因为需要捕获任意数量的单词。
编辑:这是一个例子:
and everyone went to the park and nobody was left at home
应该捕获:
nobody was left at home
正则表达式无法对短语 "nobody was left at home" 进行硬编码,因为它需要捕获除 "and".
之外的任何任意单词序列更好:
and it was morning and everyone went to the park and nobody was left at home
应该捕获:
nobody was left at home
总的来说,我只想捕获第一个 "and",从右边开始。
我可以编写一些代码来执行此操作,但想知道是否有正则表达式方法来执行此操作。
我正在使用 Python re,但对其他风格的正则表达式持开放态度。
感谢您的帮助。
应该这样做:
/(?:.* and )?(.+)/
请注意,这会匹配整行,但 捕获的匹配项 将是您想要的部分。一个工作示例是 here.
不过有一些注意事项:
- 假设每行一个句子。
- 如果其中没有单词 'and',这将匹配整行。也许这就是你想要的。
- 这假设该行的第一个词不是 'and'。
- 这还假设该行的最后一个字不是 'and'。