如何用Python正则提取指定模式之后的所有独立单词作为单独分组
问题原因
之前的正则无法达到预期的原因:
(?<=a )(\w+)的正向断言只会定位到a后的首个位置,单次匹配仅捕获第一个出现的单词(?<=a ).*为贪婪匹配,会直接匹配到行尾,因此只能得到一个整串结果
方案1:纯正则单步实现
使用\G锚点匹配上一次匹配结束的位置,实现连续捕获a 后的所有单词:
正则表达式为:(?:(?<=a )|\G(?!^))(\w+)
各部分含义:
(?<=a ):定位到紧跟a之后的首个匹配起始位置\G(?!^):匹配上一次匹配结束的位置,(?!^)排除字符串起始位置,避免匹配到a之前的内容- 捕获组
(\w+):提取每个独立单词
Python代码示例:
import re text = "we have a Newliner Chatacter in 10000 the Middle of the sentence" pattern = r'(?:(?<=a )|\G(?!^))(\w+)' res = re.findall(pattern, text) # 输出验证 for word in res: print(word)
方案2:拆分后匹配(更易维护,性能更优)
如果不需要严格用单条正则完成,可以先提取a 之后的子串,再对该子串做单词匹配,逻辑更简单直观:
Python代码示例:
import re text = "we have a Newliner Chatacter in 10000 the Middle of the sentence" # 按第一个出现的"a "拆分,取后半部分 after_part = text.split("a ", 1)[1] res = re.findall(r'\w+', after_part) # 输出验证 for word in res: print(word)
两种方案输出结果均和预期完全一致。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

