You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则中.*为何无法匹配完整字符串?

问题:正则匹配包含换行的整个字符串失败怎么办?

运行以下代码:

my_string = 'START\r\nwords\t" Quoted Words"\r\nmore12345\t$$symbols\r\n END'
pattern = '(.*)'
matches = re.match(pattern, my_string)
matches.groups(0)

期望输出:

('START\r\nwords\t" Quoted Words"\r\nmore12345\t$$symbols\r\n END',)

实际输出:

('START\r',)

解决方法

问题根源在于:re.match默认仅从字符串起始位置匹配,且.元字符默认不匹配换行符(\r、\n这类换行相关字符),所以匹配到第一个\r就终止了。要匹配包含换行的整个字符串,有两种实用方案:

方案一:添加re.DOTALL标志

给re.match传入re.DOTALL(或简写re.S)参数,让.可以匹配包括换行在内的所有字符:

import re
my_string = 'START\r\nwords\t" Quoted Words"\r\nmore12345\t$$symbols\r\n END'
pattern = '(.*)'
matches = re.match(pattern, my_string, re.DOTALL)
print(matches.groups(0))

方案二:修改正则表达式匹配所有字符

用[\s\S]替代.,这个表达式能匹配所有空白字符和非空白字符(等价于所有字符),无需额外标志:

import re
my_string = 'START\r\nwords\t" Quoted Words"\r\nmore12345\t$$symbols\r\n END'
pattern = '([\s\S]*)'
matches = re.match(pattern, my_string)
print(matches.groups(0))

额外提示:如果只是单纯需要得到包含整个字符串的元组,完全不需要正则,直接写(my_string,)就能得到目标结果。只有在必须使用正则的场景下,再用上面的方法。

内容的提问来源于stack exchange,提问作者whoopscheckmate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:03:13