假设你有这样一个字符串:
"(hello) (yes) (yo diddly)"
,你想得到这样一个列表:["hello", "yes", "yo diddly"]
。如何在Python中实现呢?import re
pattern = re.compile(r'\(([^)]*)\)')
模式匹配您字符串中的括号(\(...\)
),这些需要转义。然后定义了一个子组((...)
)-这些括号是正则表达式语法的一部分。子组匹配除右括号之外的所有字符([^)]*
)。s = "(hello) (yes) (yo diddly)"
pattern.findall(s)
提供
['hello', 'yes', 'yo diddly']
更新:
使用[^)]+
可能比[^)]*
更好。后者将匹配一个空字符串。
如DSM所建议的,使用非贪婪修饰符可能使模式更易读:pattern = re.compile(r'\((.+?)\)')
?
相比有什么优势吗? - DSM我会这样做:
"(hello) (yes) (yo diddly)"[1:-1].split(") (")
首先,我们切掉第一个和最后一个字符(因为它们应该被移除)。接下来,我们使用“) (“作为分隔符将结果字符串分割,得到所需的列表。
>>> s="(hello) (yes) (yo diddly)"
>>> import re
>>> words = re.findall(r'\((.*?\))',s)
>>> words
['hello', 'yes', 'yo diddly']
?
使其变为非贪婪模式。