我有这个字符串hellohatto
如果我有这个:h.{1,20}o
它只匹配整个单词hellohatto
,但我想要hello
,hatto
和hellohatto
。
你能指导我正确的方向吗?我错过了什么?
修改
对不起,我没有更好的解释。我只是想找到一个正则表达式来查找以h
开头且以o
结尾的所有匹配,从1到最多20个字符。在我的例子中,这应该给我3个匹配:
" hello
"," hatto
"和" hellohatto
"。
答案 0 :(得分:2)
您可以使用find all来获取以特定字母开头和结尾的所有字符串,但是您无法扩展结尾而忽略一个字符串。
EG。
import re
x = "helasdfasdfasdfasdfasdfdlohatto"
y = "hellohatto"
x1 = re.findall(r"h\w{0,20}?o",x)
x2 = re.findall(r"h\w{0,20}?o",y)
['hatto'] #x1
['hello', 'hatto'] #x2
答案 1 :(得分:0)
由于您已更新并编辑了您的问题,因此这里是我更新的问题答案,其中包含0,20开头的所有单词" h"并以" o"
结束import re
pattern = r'(?=(\bh\w*o\b))(h\w*?o)?(h\w*?o)?(h\w*?o)?(h\w*?o)?(h\w*?o)?(h\w*?o)?'
string_match = ["hellohatto"]
new_list=[]
for iter_1 in string_match:
match = re.findall(pattern, iter_1,re.M)
for i in match:
print([final_match for final_match in i if final_match])
成功试用了许多单词检查直播:
https://regex101.com/r/7X3KRr/9
旧解决方案:
您也可以使用群组捕获方法尝试此操作:
import re
pattern = r'(\w{5})(\w+)'
string_match = "hellohatto"
match = re.search(pattern, string_match)
print("first match = {} \n second match = {} \n third match = {}".format(match.group(0),match.group(1),match.group(2)))
不同的正则表达式:
import re
pattern = r'(h[ell | att]+o)(h[ell | att]+o)'
string_match = "hellohatto"
match = re.search(pattern, string_match)
print(match.group(0),match.group(1),match.group(2))
但是如果你只想分开两个单词,那么这个匹配就完美了:
import re
pattern = r'(h[ell | att]+o)'
string_match = "hellohatto"
match = re.findall(pattern, string_match)
for i in match:
print(i)
答案 2 :(得分:0)
import re
text = "hellohatto"
ans = re.findall(r"h.*?o",y) + (re.findall(r"h.*o", y))
print(ans)
输出:
['你好','hatto','hellohatto']