假设你有一个这样的字符串:"(hello) (yes) (yo diddly)"
。
您想要一个这样的列表:["hello", "yes", "yo diddly"]
你会如何用Python做到这一点?
答案 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所说的那样。
正则表达式中的 ?
使其变得非贪婪。