Python正则匹配问题:如何提取完整目标值而非单个字符?
解决正则提取完整目标字符串的问题
嘿,我来帮你搞定这个正则提取的小麻烦!你现在遇到的问题是,原来的正则表达式只会匹配单个符合条件的字符,所以findall返回的是一个个字符组成的列表,而不是你想要的完整字符串。
问题根源
你写的正则[A-Z,\d]是用来匹配单个大写字母、数字或者逗号的(不过你的目标字符串里没有逗号,这个其实是多余的哦),findall会把所有匹配到的单个字符都收集起来,自然就得到了一堆零散的字符。
解决方案
我们需要匹配连续的符合规则的字符序列,这里有两种靠谱的方法:
方法1:利用单引号精准定位(推荐)
因为你的目标字符串正好被单引号包裹着,我们可以直接匹配单引号之间的内容,这样既精准又不会误匹配其他内容:
import re test = "code.coding = 'DS-2002433E172062D';" # 正则解释:匹配单引号,然后捕获里面连续的大写字母、数字、连字符,最后匹配结束的单引号 pattern = re.compile(r"'([A-Z\d-]+)'") result = re.findall(pattern, test) print(result) # 输出: ['DS-2002433E172062D']
这里的+表示匹配前面的模式(大写字母、数字、连字符)至少一次,这样就能把整个连续的字符串都匹配到,而()捕获组会帮我们把单引号里面的内容提取出来。
方法2:直接匹配符合格式的ID
如果不想依赖单引号的位置,也可以直接匹配符合你目标格式的字符串:
import re test = "code.coding = 'DS-2002433E172062D';" pattern = re.compile(r"[A-Z\d-]+") result = re.findall(pattern, test) print(result) # 输出: ['DS-2002433E172062D']
不过这种方法要注意,如果你的文本里还有其他类似格式的字符串,可能会被一起匹配出来,所以方法1的精准度更高。
小提示
记得把原来正则里的逗号去掉哦,因为你的目标字符串里没有逗号,留着可能会匹配到不需要的内容。
内容的提问来源于stack exchange,提问作者sidddayi
相关产品推荐
相关产品推荐

