Python正则表达式:如何在匹配的10位数字前加+91并批量处理文件
解决正则匹配后添加前缀的问题(附批量文件处理示例)
嘿,这个需求其实很容易搞定,核心就是利用正则的捕获分组+反向引用功能,我一步步给你讲清楚:
一、你的具体场景解决方案
你要给10位数字前加+91,只需要把匹配的数字用括号包裹成捕获组,然后在替换字符串里引用这个分组就行。直接看代码:
import re s = "The number is 1234567890" # 用()把\d{10}包裹成捕获组,替换时用\1引用捕获到的内容 result = re.sub(r"(\d{10})", r"+91\1", s) print(result) # 输出: The number is +911234567890
这里要注意替换字符串用原始字符串r"",避免转义字符\被Python解析成其他含义。如果怕混淆分组序号,也可以用命名分组,可读性更强:
result = re.sub(r"(?P<phone_num>\d{10})", r"+91\g<phone_num>", s)
二、通用方法:匹配模式后添加前缀/后缀
不管是要在匹配内容前加字符串,还是后面加,逻辑都是固定的3步:
- 把需要保留的匹配部分用
()创建捕获组; - 在替换字符串中,用
\n(n是分组序号,从1开始)或者\g<组名>(命名分组)引用捕获到的内容; - 在引用的前后拼接你想要添加的字符串。
举几个实用例子:
- 给邮箱地址前加
mailto::s = "联系我:test@example.com" result = re.sub(r"(\w+@\w+\.\w+)", r"mailto:\1", s) # 输出: 联系我:mailto:test@example.com - 给所有"Python"后加"3.10+":
s = "我喜欢Python,Python很强大" result = re.sub(r"(Python)", r"\13.10+", s) # 输出: 我喜欢Python3.10+,Python3.10+很强大
三、批量处理指定扩展名文件的示例代码
既然你要批量处理文件,这里给你一个完整的小脚本参考(记得先备份文件再测试!):
import os import re # 配置参数 target_extension = ".txt" # 你要处理的文件扩展名 match_pattern = r"(\d{10})" # 你的匹配正则 prefix_to_add = r"+91" # 要添加的前缀 # 遍历当前目录下的目标文件 for filename in os.listdir("."): if filename.endswith(target_extension): # 读取文件内容 with open(filename, "r", encoding="utf-8") as file: content = file.read() # 执行替换 updated_content = re.sub(match_pattern, f"{prefix_to_add}\\1", content) # 或者用原始字符串:r"+91\1",效果完全一致 # 写回文件(建议先备份原文件,比如复制成filename.bak) with open(filename, "w", encoding="utf-8") as file: file.write(updated_content) print(f"已处理文件:{filename}")
这样就能批量把所有指定扩展名文件里的10位数字都加上+91前缀啦!
内容的提问来源于stack exchange,提问作者MOHAMMED NUMAN
相关产品推荐
相关产品推荐

