我是编程新手并尝试用正则表达式解决这个问题,在字符串中搜索单词' can',对于每次出现,在它前面和后面显示两个单词,表格示例为字符串:
string = "CAN CAn Can cAN cAn caN can"
pattern = re.compile(r'(\S+\s+\S+)\s+can\s+(\S+\s+\S+)', re.I)
list = pattern.findall(string)
print list
预期结果:
[('CAN CAn', 'cAN cAn'), ('CAn Can', 'cAn caN'), ('Can cAN', 'caN can')]
实际结果:
[('CAN CAn', 'cAN cAn')]
答案 0 :(得分:1)
(?=(\b\S+\s+\S+)\s+can\s+(\S+\s+\S+\b))
试试这个。看看演示。
https://regex101.com/r/sJ9gM7/104#python
你的正则表达式的问题是,一旦引擎消耗了字符串就无法返回。你需要一个variable lookbehind
这个在python中不存在。实际上你可以做的就是将所有内容都放在{{ 1}}这样就不会消耗掉字符串,你可以得到所有可能的组合。
lookahead