作者dosiris (希望大家开心)
看板Python
标题[问题] 关於正规表示法的r'\1'?
时间Wed Oct 22 02:17:25 2025
请教一下,在用下面的例子学正规表示法时:
import re
text="how are you I am fine!"
regex = r'(\w+)\s+(\w+)'
re.sub(regex, r'\1', text)
不是应该先把text用空格切分为how和are、you和I、am和fine!等三部分。
然後再根据r'\1'挑选出上述前部分的前面那个单字,即how、you、am合并为'how you am'
怎麽执行的结果竟然把惊叹号也给am,变成输入为 'how you am!'
(把r'\r'改为r'\2'的输出就是符合预期的 'are I fine!' 说。)
不知道是哪里理解有错误吗?谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.129.144.87 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1761070647.A.2C8.html
1F:推 penolove5566: 你这个观察非常敏锐 。问题的关键在於: 10/22 09:00
2F:→ penolove5566: re.sub() 并不是先把整个字串切分为多段、再各自取 10/22 09:00
3F:→ penolove5566: 代;它是用滑动匹配 (greedy matching) 的方式,逐 10/22 09:00
4F:→ penolove5566: 段依照正规表示式找到 所有匹配的「重叠区域」,并 10/22 09:00
5F:→ penolove5566: 逐一取代。 10/22 09:00
7F:→ penolove5566: 0-f0aa2b654319 10/22 09:05
8F:→ CaptainH: 先match到"how are"→取代成"how" 10/22 12:38
9F:→ CaptainH: 再match到"you I" → 取代为you 10/22 12:38
10F:→ CaptainH: 最後match到"am fine"→取代为am 10/22 12:39
11F:→ CaptainH: 剩下的"!"没有处理,保留 10/22 12:39
12F:→ CaptainH: 你的症结应该是:\w只是[a-zA-Z0-9_], 不包括"!" 10/22 12:42
13F:→ dosiris: 了解 学到宝贵一课 谢谢分享! 10/25 17:39