我必须匹配3个以相同字母开头和结尾的连续单词
我有这样的代码:
import re
def regex(file):
with open(file) as f:
s=f.read()
rx=re.compile(r"([a-z])+\s+\1",re.I)
r=re.findall(rx,s)
print(r)
return len(r)
文件中的文字是这样的
dcvs xa Allo ozo zn bnro ce erdda anfgato e csdfa
我期待这个结果:
dcvs x a A ll o o zo zn bnro c e e rdd a a nfgato e csdfa
[('a','o'),('e','a')]
2
但我得到了这个:
['a', 'o', 'e', 'a']
4
有任何线索吗?
答案 0 :(得分:0)
使用此模式..
r"([a-z])\s\1\w*([a-z])\s\2"
在您使用的模式中,您只搜索结尾的2个单词并以相同的字母开头。
要搜索3个单词,您必须告诉第3个和第4个字母来自同一个单词。这是我脑海中最简单的方式。但这不是最佳方式..
ps:答案按照评论中的建议进行了编辑..
答案 1 :(得分:0)
您可以使用
re.compile(r"[^a-z][a-z]*([a-z])[^a-z]+\1[a-z]*([a-z])[^a-z]+\2[a-z]*[^a-z]",re.I)
请参阅regex demo。
请注意,在这种情况下,re.findall
将返回元组列表(捕获值的元组),因为有2个捕获组,而re.findall
仅在正则表达式中定义捕获组时返回捕获图案。
<强>详情
[^a-z]
- 任何字符,但ASCII字母[a-z]*
- 0+ ASCII字母([a-z])
- 第1组:任何ASCII字母[^a-z]+
- 除ASCII字母以外的任何1个字符\1
- 对第1组内容的反向引用,与第1组中捕获的文本相同的文本[a-z]*
- 0+ ASCII字母([a-z])
- 第2组:ASCII字母[^a-z]+
- 除ASCII字母以外的任何1个字符\2
- 对第1组内容的反向引用,与第2组中捕获的文本相同[a-z]*
- 0+ ASCII字母[^a-z]
- 除ASCII字母以外的任何1个字符import re
def regex(s):
rx=re.compile(r"[^a-z][a-z]*([a-z])[^a-z]+\1[a-z]*([a-z])[^a-z]+\2[a-z]*[^a-z]",re.I)
d=rx.findall(s)
print(d)
return len(d)
print(regex('dcvs xa Allo ozo zn bnro ce erdda anfgato e csdfa'))
输出:
[('a', 'o'), ('e', 'a')]
2