匹配所有出现的正则表达式

时间:2017-10-01 16:34:57

标签: python regex

我有这个字符串hellohatto

如果我有这个:h.{1,20}o

它只匹配整个单词hellohatto,但我想要hellohattohellohatto

你能指导我正确的方向吗?我错过了什么?

修改

对不起,我没有更好的解释。我只是想找到一个正则表达式来查找以h开头且以o结尾的所有匹配,从1到最多20个字符。在我的例子中,这应该给我3个匹配:

" hello"," hatto"和" hellohatto"。

3 个答案:

答案 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']