如何用Python正则表达式提取字符串中单引号间的内容?
解决单引号内容提取的正则问题
Hey there! Let's break down why your current regex isn't working and fix it quickly.
你的原正则问题出在哪?
你写的 r'\'*\' 其实是在匹配零个或多个单引号,再加上一个单引号——简单说,它找的是单引号本身(或者连续的单引号),完全没涉及到引号中间的内容,所以自然提取不到very well啦。
正确的正则写法
要提取单引号之间的内容,我们需要先匹配开头的单引号,然后捕获中间的所有字符,最后匹配结尾的单引号。这里推荐用非贪婪匹配来避免多引号场景下的错误匹配,具体写法如下:
import re str1 = "I am doing 'very well' for your info" # 正则:匹配单引号,捕获中间非贪婪的任意内容,再匹配结束单引号 pt = re.compile(r"'(.*?)'") m = pt.findall(str1) print(m) # 输出结果: ['very well']
详细解释这个正则
':精准匹配开头的单引号(.*?):这是一个捕获组,.*?是非贪婪模式的任意字符匹配——它会在遇到第一个结束的单引号时停止匹配,完美适配多个单引号的场景(比如"I'm 'good' and 'fine'"会提取出['good', 'fine'])':精准匹配结尾的单引号
如果你的字符串里绝对只有一对单引号,也可以用贪婪匹配r"'(.*)'",但非贪婪模式更通用、更安全哦。
内容的提问来源于stack exchange,提问作者mrt
相关产品推荐
相关产品推荐

