我有一个更具挑战性的任务,但我首先面临这个问题。给定一个字符串 s,我想提取所有由一些分隔符标记的字符组,例如括号。我如何使用正则表达式(或任何 Pythonic 方式)完成此操作?
import re
>>> s = '(3,1)-[(7,2),1,(a,b)]-8a'
>>> pattern = r'(\(.+\))'
>>> re.findall(pattern, s).group() # EDITED: findall vs. search
['(3,1)-[(7,2),1,(a,b)']
# Desire result
['(3,1)', '(7,2)', '(a,b)']
请您参考如下方法:
使用 findall() 而不是 search()。前者找到所有出现的地方,后者只找到第一个。
使用非贪婪的 ? 运算符。否则,您将找到从第一个 () 开始到最后一个 ) 结束的匹配项。
请注意,正则表达式不是查找嵌套表达式的好工具,例如:((1,2),(3,4))。
import re
s = '(3,1)-[(7,2),1,(a,b)]-8a'
pattern = r'(\(.+?\))'
print re.findall(pattern, s)
