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

Nam*_*nge 3 python string list

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

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

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

The*_*eke 9

import re
pattern = re.compile(r'\(([^)]*)\)')
Run Code Online (Sandbox Code Playgroud)

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

s = "(hello) (yes) (yo diddly)"
pattern.findall(s)
Run Code Online (Sandbox Code Playgroud)

['hello', 'yes', 'yo diddly']
Run Code Online (Sandbox Code Playgroud)

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

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


ars*_*jii 8

我会这样做:

"(hello) (yes) (yo diddly)"[1:-1].split(") (")
Run Code Online (Sandbox Code Playgroud)

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

  • 使用正则表达式的答案更灵活。该答案不会产生正确的输出,例如,如果字符串以空格开头或结尾,或者括号之间有多个空格或制表符。 (2认同)