5

假设你有一个这样的字符串:"(hello) (yes) (yo diddly)".

你想要一个这样的列表:["hello", "yes", "yo diddly"]

你会如何用 Python 做到这一点?

4

3 回答 3

11
import re
pattern = re.compile(r'\(([^)]*)\)')

该模式与您的字符串 ( \(...\)) 中的括号匹配,这些需要被转义。
然后它定义了一个子组 ( (...)) - 这些括号是正则表达式语法的一部分。
子组匹配除右括号 ( [^)]*)之外的所有字符

s = "(hello) (yes) (yo diddly)"
pattern.findall(s)

['hello', 'yes', 'yo diddly']

更新:
使用[^)]+而不是[^)]*. 后者也将匹配一个空字符串。

正如 DSM 所建议的那样,使用非贪婪修饰符可能会使该模式更好地阅读:pattern = re.compile(r'\((.+?)\)')

于 2012-09-01T20:59:50.710 回答
11

我会这样做:

"(hello) (yes) (yo diddly)"[1:-1].split(") (")

首先,我们切断了第一个和最后一个字符(因为无论如何都应该删除它们)。接下来,我们使用 ") (" 作为分隔符拆分结果字符串,给出所需的列表。

于 2012-09-01T20:39:58.157 回答
4

这将为您提供任何字符串中的单词:

>>> s="(hello) (yes) (yo diddly)"
>>> import re
>>> words = re.findall(r'\((.*?\))',s)
>>> words
['hello', 'yes', 'yo diddly']

正如帝斯曼所说。

?在正则表达式中使其不贪婪。

于 2012-09-01T20:45:01.953 回答