正则表达式提取字符串中括号内子字符串的问题求助
如何提取字符串中括号内的所有子字符串
咱们先来拆解下你之前的尝试为啥没成功,再给你对应的正确解法:
问题1:提取小括号内的内容(原需求)
你最初的目标是从" I wanted my friends (he), (she), (they) around"里提取["he", "she", "they"],但用了r'^{.}$'这个正则:
- 这个正则的意思是匹配整个字符串必须以
{开头、任意单个字符结尾,完全不符合你要抓小括号内容的需求,所以输出空列表很正常。
正确解法(小括号场景)
用这个正则表达式:r'\(([^)]+)\)',解释下:
\(:转义匹配左小括号(因为括号在正则里是特殊字符,必须转义)([^)]+):捕获组,匹配任意非右小括号的字符([^)]表示排除右括号,+表示至少匹配1个字符)\):转义匹配右小括号
代码示例:
import re original_str = " I wanted my friends (he), (she), (they) around" result = re.findall(r'\(([^)]+)\)', original_str) print(result) # 输出: ['he', 'she', 'they']
问题2:提取大括号内的内容(你第二个测试用例)
你后来用了copy = '{he},{she}, {they}',但正则写了r'\{([^]]*)\}',这里的问题是:
[^]]表示匹配非右方括号的字符,但你的括号是大括号},所以这个规则会一直匹配到字符串末尾的},导致把所有内容都抓成一个字符串。
正确解法(大括号场景)
把正则改成r'\{([^}]+)\}',把排除的字符换成大括号的右括号}就行:
代码示例:
import re copy = '{he},{she}, {they}' result = re.findall(r'\{([^}]+)\}', copy) print(result) # 输出: ['he', 'she', 'they']
通用思路总结
不管是哪种括号(小括号、大括号、方括号),提取括号内内容的核心逻辑都是:
- 转义匹配左括号(比如
\(、\{、\[) - 用捕获组匹配除了对应右括号之外的所有字符(比如
[^)]+、[^}]+、[^]]+) - 转义匹配右括号(比如
\)、\}、\])
内容的提问来源于stack exchange,提问作者Jd_mahmud
相关产品推荐
相关产品推荐

