如何提取BRAND~*与*~之间的文本?正则表达式匹配求助
解决正则匹配问题
你的正则表达式问题出在两个关键点:
*是正则元字符,代表匹配前一个元素零次或多次,但你要匹配的是字面的*符号,必须转义为\*- 非贪婪模式
(.+?)会在遇到第一个符合后续规则的字符时停止匹配,导致只捕获到第一个*
正确实现方式
使用转义后的正则,结合贪婪或非贪婪模式都能得到目标结果:
方法1:使用re.findall
import re s = "BRAND~*HP*5250*RAM128*GPUAMD7990*~" # 用raw字符串避免转义冲突,\*匹配字面星号,.*贪婪匹配到最后一个*~前的内容 result = re.findall(r'BRAND~\*(.*)\*~', s) print(result) # 输出: ['HP*5250*RAM128*GPUAMD7990']
方法2:使用re.search(更直接获取单个结果)
import re s = "BRAND~*HP*5250*RAM128*GPUAMD7990*~" match = re.search(r'BRAND~\*(.*)\*~', s) if match: print(match.group(1)) # 输出: HP*5250*RAM128*GPUAMD7990
规则解释
r'BRAND~\*(.*)\*~':BRAND~匹配固定前缀\*匹配字面的*符号(.*)贪婪匹配所有字符,直到遇到最后一个\*~(贪婪模式会尽可能匹配最长的有效内容)\*~匹配固定后缀
内容的提问来源于stack exchange,提问作者Maymay
相关产品推荐
相关产品推荐

