我有一个单词列表,比如:
l = """abc
dfg
hij
jih
gfd
cba
cbd
jip
gfe
jiw
cbw"""
我想从这张单子里找出成对的单词, 所以第一个词是:
^{pr2}$第二个词是:
\2\1.
所以\1和\2表示第一个单词中的字符。在
我能想到的最好的regexp是:
re.findall('(^.(?P<A>.)(?P<B>.)$)(?=.*(^(?P=B)(?P=A).$))', l, re.DOTALL | re.MULTILINE)
但是这个搜索只返回部分对(因为findall只返回不重叠的结果…)。 然后我考虑使用肯定的lookbehind断言,但是它们只能用于固定长度的字符串。。。在
有没有办法用regex做到这一点?在
我怀疑正则表达式是否是一种很好的方法(尤其是在Python中,如果不能像Perl那样简单地获得匹配字符串的所有可能方法,那么必须对字符串的所有前缀调用
findall
)。一个简单的选择是:结果:
^{pr2}$您还可以通过第一次保存字典中单词的前缀,然后在第二次过程中建立关联来快速解决此问题:
它的性能是正则表达式引擎无法比拟的。在
相关问题 更多 >
编程相关推荐