我有一项更具挑战性的任务,但首先我遇到了这个问题。给定一个字符串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)']
答案 0 :(得分:2)
使用findall()
代替search()
。前者发现所有出现,后者只找到第一个出现。
使用非贪婪的?
运算符。否则,您会找到从第一个(
开始到最后)
结束的匹配。
请注意,正则表达式不是查找嵌套表达式的好工具,例如:((1,2),(3,4))
。
import re
s = '(3,1)-[(7,2),1,(a,b)]-8a'
pattern = r'(\(.+?\))'
print re.findall(pattern, s)
答案 1 :(得分:1)
使用 re.findall()
import re
data = '(3,1)-[(7,2),1,(a,b)]-8a'
found = re.findall('(\(\w,\w\))', data)
print found
输出:
['(3,1)', '(7,2)', '(a,b)']