python 重新反向引用重复元素
python re backreference repeated elements
假设我有一个这样的字符串...
myStr = 'START1(stuff); II(morestuff); 8(lessstuff)'
...我想提取括号前的字符串,以及括号内的字符串:1
、stuff
、II
、morestuff
、8
、lessstuff
。我可以使用 split(';')
等实现这一点,但我想看看我是否可以用 re.search()
一举完成。我试过了...
test = re.search( r'START(?:([I0-9]+)\(([^)]+?)\)(?:; )?)*', myStr ).groups()
...或更易读的格式...
test = re.search( r'''
START # This part begins each string
(?: # non-capturing group
([I0-9]+) # capture label before parentheses
\(
([^)]+?) # any characters between the parentheses
\)
(?:; )? # semicolon + space delimiter
)*
''', myStr, re.VERBOSE ).groups()
...但我只得到 最后 命中:('8', 'lessstuff')
。有没有办法反向引用表达式同一部分的多个命中?
您可以在 findall
中使用此正则表达式来捕获您的文本:
>>> myStr = 'START1(stuff); II(morestuff); 8(lessstuff)'
>>> print re.findall(r'(?:START)?(\w+)\(([^)]*)\)', myStr)
[('1', 'stuff'), ('II', 'morestuff'), ('8', 'lessstuff')]
假设我有一个这样的字符串...
myStr = 'START1(stuff); II(morestuff); 8(lessstuff)'
...我想提取括号前的字符串,以及括号内的字符串:1
、stuff
、II
、morestuff
、8
、lessstuff
。我可以使用 split(';')
等实现这一点,但我想看看我是否可以用 re.search()
一举完成。我试过了...
test = re.search( r'START(?:([I0-9]+)\(([^)]+?)\)(?:; )?)*', myStr ).groups()
...或更易读的格式...
test = re.search( r'''
START # This part begins each string
(?: # non-capturing group
([I0-9]+) # capture label before parentheses
\(
([^)]+?) # any characters between the parentheses
\)
(?:; )? # semicolon + space delimiter
)*
''', myStr, re.VERBOSE ).groups()
...但我只得到 最后 命中:('8', 'lessstuff')
。有没有办法反向引用表达式同一部分的多个命中?
您可以在 findall
中使用此正则表达式来捕获您的文本:
>>> myStr = 'START1(stuff); II(morestuff); 8(lessstuff)'
>>> print re.findall(r'(?:START)?(\w+)\(([^)]*)\)', myStr)
[('1', 'stuff'), ('II', 'morestuff'), ('8', 'lessstuff')]