假设你有一个这样的字符串:"(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'\((.+?)\)')
我会这样做:
"(hello) (yes) (yo diddly)"[1:-1].split(") (")
首先,我们切断了第一个和最后一个字符(因为无论如何都应该删除它们)。接下来,我们使用 ") (" 作为分隔符拆分结果字符串,给出所需的列表。
这将为您提供任何字符串中的单词:
>>> s="(hello) (yes) (yo diddly)"
>>> import re
>>> words = re.findall(r'\((.*?\))',s)
>>> words
['hello', 'yes', 'yo diddly']
正如帝斯曼所说。
?
在正则表达式中使其不贪婪。