Python正则表达式问题:如何在数字与性别标识间添加逗号?
解决在数字与性别标识间添加逗号的正则问题
嘿,我来帮你搞定这个正则调整的问题!先明确下你的需求:
输入文本:
Adam, 30 M, Husband
期望输出:Adam, 30, M, Husband,
你之前写的正则re.sub(r'\b(\d{1,2}\s\w{1},)\b', r'\1,', text)其实方向偏了——它是在匹配「数字+空格+单个字母+逗号」这个整体后,再额外加个逗号,这可不是我们要的效果。咱们真正要做的是在数字(30)和后面的单个字母(M)之间插入逗号。
给你两个实用的实现方案:
方案一:通用匹配数字+空格+单个字母的场景
这个方案适合大多数类似的格式调整,不管后面的字母是不是性别标识,都能把数字和字母之间的空格换成「逗号+空格」:
import re text = "Adam, 30 M, Husband" # 替换数字与字母间的空格为 ", " adjusted_text = re.sub(r'(\d+)\s(\w)', r'\1, \2', text) # 如果需要给末尾也加逗号,再补一步 final_text = adjusted_text + ',' print(final_text) # 输出:Adam, 30, M, Husband,
方案二:精准匹配性别标识(M/F)的场景
如果你只想针对性别相关的单个字母(比如M/F)做调整,避免误匹配其他数字+空格+字母的情况,可以用正向预查来限定范围:
import re text = "Adam, 30 M, Husband" # 只匹配数字后接空格、M/F且后面跟着逗号的情况 adjusted_text = re.sub(r'(\d+)\s([MF])(?=,)', r'\1, \2', text) final_text = adjusted_text + ',' print(final_text) # 输出:Adam, 30, M, Husband,
内容的提问来源于stack exchange,提问作者Rohit Girdhar




