Python正则表达式中使用\r(回车符)匹配结果异常是什么原因?
核心原因
Python re 模块的默认规则中,. 元字符默认不匹配换行符,但该模块定义的「换行符」仅指代 \n,\r(回车符)不属于换行符范畴,会被.识别为普通可匹配字符。
两种场景的差异说明
- 使用
\n作为分隔符时:.*无法匹配\n,匹配逻辑会在遇到第一个\n时停止,刚好命中你预期的Text to find !结果。 - 使用
\r作为分隔符时:.*可以正常匹配\r,加上正则默认是贪婪匹配,会尽可能匹配更长的字符串,直到命中整段文本末尾的最后一个\r,因此会把中间的\r other text也包含进匹配结果。
解决方案
如果要实现\r分隔场景下的预期匹配,最稳妥的方式是使用排除字符组替代.*,显式指定不匹配\r:
import re text = 'Some text\rText to find !\r other text\r' res = re.search(r'Some text\r([^\r]*)\r', text).group(1) print(res) # 输出:Text to find !
内容的提问来源于stack exchange,提问作者LeoGlt
相关产品推荐
相关产品推荐

