Python正则表达式提取特定标签间内容失败问题求助
解决正则提取含换行字符串内容的问题
你的问题出在正则表达式的默认行为上:re.search里的.默认不匹配换行符,而目标内容4%被换行和空白包围,导致(.*)无法跨换行匹配到内容。
解决方案1:添加re.DOTALL(或re.S)标志
这个标志会让.匹配包括换行在内的所有字符,同时可以用strip()去掉结果前后的空白:
import re s = ''' <div class="prod-origin-price "> <span class="discount-rate"> 4% </span> <span class="origin-price">''' result = re.search('<span class="discount-rate">(.*)</span>', s, re.DOTALL) if result: # 用strip()去除前后的换行和空白字符 print(result.group(1).strip())
解决方案2:用更精准的正则匹配(推荐)
如果只想匹配空白和目标内容,可以用[\s\S]*?代替.*([\s\S]匹配所有字符,*?是非贪婪匹配,避免意外匹配过多内容),同样配合strip():
import re s = ''' <div class="prod-origin-price "> <span class="discount-rate"> 4% </span> <span class="origin-price">''' result = re.search('<span class="discount-rate">([\s\S]*?)</span>', s) if result: print(result.group(1).strip())
两种方法都能输出4%,注意要先判断result不为None,避免报错(比如当目标字符串不存在时)。
内容的提问来源于stack exchange,提问作者anfwkdrn
相关产品推荐
相关产品推荐

