Python按开始和结束字符拆分字符串

时间:2012-09-01 20:36:51

标签: python string list

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

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

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

3 个答案:

答案 0 :(得分:9)

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

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

之外的所有字符
s = "(hello) (yes) (yo diddly)"
pattern.findall(s)

给出

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

<强>更新
最好使用[^)]+代替[^)]*。后者也会匹配一个空字符串。

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

答案 1 :(得分:7)

我会这样做:

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

首先,我们切断了第一个和最后一个字符(因为它们应该被移除)。接下来,我们使用“)分割结果字符串(”作为分隔符,给出所需的列表。

答案 2 :(得分:2)

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

>>> s="(hello) (yes) (yo diddly)"
>>> import re
>>> words = re.findall(r'\((.*?\))',s)
>>> words
['hello', 'yes', 'yo diddly']
正如D.S.M所说的那样。

正则表达式中的

?使其变得非贪婪。