Python 如何重复捕获组一次或多次并提取匹配项
是否可以使用一个正则表达式验证此字符串并提取所有名称: 输入:Python 如何重复捕获组一次或多次并提取匹配项,python,regex,Python,Regex,是否可以使用一个正则表达式验证此字符串并提取所有名称: 输入: daz.Da zD.{Azd} .{AZDza}; D name:{franck}{steve}{louis} zefzef{z'f'z} fze fzef zef 乌普图特: [0]“法郎” [1] “史蒂夫” [2] “路易斯” 下面是我得到的:name:(?:{(.*?})但是我不知道如何重复(一个或多个)这个表达式(?:{(.*?})来提取name:之后的所有名称 我不想使用支持重复捕获组的python包。不使用单个正则
daz.Da zD.{Azd} .{AZDza}; D
name:{franck}{steve}{louis}
zefzef{z'f'z} fze fzef zef
乌普图特:
[0]“法郎”
[1] “史蒂夫”
[2] “路易斯”
下面是我得到的:name:(?:{(.*?})
但是我不知道如何重复(一个或多个)这个表达式(?:{(.*?})
来提取name:
之后的所有名称
我不想使用支持重复捕获组的python包。不使用单个正则表达式,但您可以这样做
>>> s = '''daz.Da zD.{Azd} .{AZDza}; D
name:{franck}{steve}{louis}
zefzef{z'f'z} fze fzef zef'''
>>> [j for i in re.findall(r'(?m)^name:(.*)', s) for j in re.findall(r'\{([^}]*)\}', i)]
['franck', 'steve', 'louis']
这将从以name:
或
使用startswith
>>> s = '''daz.Da zD.{Azd} .{AZDza}; D
name:{franck}{steve}{louis}
zefzef{z'f'z} fze fzef zef'''.splitlines()
>>> [j for line in s for j in re.findall(r'\{([^}]*)\}', line) if line.startswith('name')]
['franck', 'steve', 'louis']
您可以使用带有的
\G
锚点链接匹配
它在每个搜索开始/继续的位置匹配
第一部分:匹配(?:名称:|\G(?!^))
字面上的名称:
或在最后一个匹配结束的地方继续,开始时|\G
(?!^)
第二部分:捕获{([^}]+)}
内部}
..{
到$1,并粘贴到成功的上一个匹配项}
regex.findall一起使用
可能重复的谢谢!这就是我想要的!:)使用regex包,您可以做得更简单,因为它能够存储重复捕获组的结果。您可以将此简单模式与search
方法一起使用:name:(?:{([^}]+)})+
并使用m.captures(1)
获取结果列表。
(?:name:|\G(?!^)){([^}]+)}