Python正则表达式提取特定字符间内容问题求助
解决方法
问题分析
你当前的正则(?<=&)(.*?)(?=&)会匹配&之间的所有内容,包括两个连续&之间的空字符串,同时保留了内容前后的空格,所以得到了带空格和空项的列表。
方案一:优化正则表达式
调整正则匹配规则,只抓取&之间非空的内容,再通过列表推导式清理空格并过滤空项:
import re str_1 = " & peers & & apples & & lemon juice & & Strawberries & & Mellon & " list_1 = [content.strip() for content in re.findall(r'&([^&]+)&', str_1) if content.strip()] print(list_1)
&([^&]+)&:匹配被&包裹的、至少包含一个非&字符的内容,避免匹配空项content.strip():去掉内容前后的空格if content.strip():过滤掉处理后为空的元素(防止极端场景下的无效项)
方案二:字符串分割(更易理解,适合新手)
不用正则,直接通过字符串分割和列表推导式处理,逻辑更直观:
str_1 = " & peers & & apples & & lemon juice & & Strawberries & & Mellon & " list_1 = [item.strip() for item in str_1.split('&') if item.strip()] print(list_1)
str_1.split('&'):按&拆分字符串,得到包含空字符串和带空格项的列表- 后续的
strip()和过滤条件,直接清理掉无效内容,留下目标元素
两种方法最终都会输出你想要的结果:['peers','apples','lemon juice','Strawberries','Mellon']
内容的提问来源于stack exchange,提问作者Datafan
相关产品推荐
相关产品推荐

