我有一个单词列表,例如:
l = """abca
bcab
aaba
cccc
cbac
babb
"""
我想找到第一个和最后一个字符相同,并且中间两个字符与第一个/最后一个字符不同的单词。
期望的最终结果:
['abca', 'bcab', 'cbac']
我试过这个:
re.findall('^(.)..\\1$', l, re.MULTILINE)
但它也会返回所有不需要的词。 我想过以某种方式使用 [^...] ,但我无法弄清楚。 有一种方法可以使用集合来执行此操作(以过滤上述搜索的结果),但我正在寻找正则表达式。
这可能吗?
最佳答案
编辑:固定使用否定先行断言而不是否定后视断言。阅读@AlanMoore 和@bukzor 解释的评论。
>>> [s for s in l.splitlines() if re.search(r'^(.)(?!\1).(?!\1).\1$', s)]
['abca', 'bcab', 'cbac']
该解决方案使用否定先行断言,这意味着“仅当当前位置后面没有其他内容的匹配项时才匹配当前位置。”现在,看看先行断言 - (?!\1)
。所有这一切意味着“仅当当前字符后没有第一个字符时才匹配当前字符。”
关于python - 使用正则表达式查找具有相同或不同字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10402998/