如何使用Regex sub()仅替换匹配模式中的特定部分?
如何用sub()仅替换正则匹配模式中的特定部分?
你的需求是给位于字母/数字之间的省略号后添加空格,原代码的问题在于:正则\w\.\.\.\w会把省略号前后的字母也包含在匹配范围内,替换时会把这些字母一起换掉,导致结果不符合预期。
可以通过两种方式实现目标:
方法1:使用捕获组保留原有字符
通过正则捕获组把需要保留的前后字母/数字存下来,替换时将它们和修改后的省略号拼接起来:
import re input_str = "hello...world" result = re.sub(r'(\w)\.\.\.(\w)', r'\1... \2', input_str) print(result) # 输出: hello... world
(\w):捕获省略号前的字母/数字,用\1在替换字符串中引用\.\.\.:匹配三个连续的点(\w):捕获省略号后的字母/数字,用\2在替换字符串中引用- 替换字符串
\1... \2:保留前后捕获的字符,仅在省略号后添加空格
方法2:使用零宽断言定位替换位置
零宽断言不会捕获字符,只是用来确定目标内容的位置,这样可以直接定位到需要修改的省略号:
import re input_str = "hello...world" result = re.sub(r'(?<=\w)\.\.\.(?=\w)', r'... ', input_str) print(result) # 输出: hello... world
(?<=\w):正向零宽后行断言,确保省略号前面是字母/数字\.\.\.:匹配三个连续的点(?=\w):正向零宽先行断言,确保省略号后面是字母/数字- 替换时直接把匹配到的
...换成...,前后的字母/数字不会被改动
内容的提问来源于stack exchange,提问作者coredstgn
相关产品推荐
相关产品推荐

