Python用re.sub替换单词末尾r为rh无效果,正则表达式哪里出错了?
正则替换问题分析与修复
错误原因
- 你的正则表达式中使用的
$符号作用是匹配整个字符串的末尾位置,而非单词的末尾位置。添加$后,只有整个文本的最后一个字符是r时才会触发匹配,你的示例文本末尾是句号,自然无法匹配到任何内容,所以没有替换效果。 $\b的组合逻辑无效:$已经代表字符串末尾,后续不存在任何字符,单词边界符\b在此处没有实际作用,反而进一步限制了匹配范围。
修复方案
删除正则中的$符号,仅保留r\b即可。\b是单词边界符,用于匹配单词字符和非单词字符(空格、标点、字符串首尾等)的分界位置,r\b可以精准匹配所有出现在单词末尾的小写r字符。
如果你需要和你给出的预期输出完全一致(即保留首字母大写的Her不替换),可以调整规则为r'(?<=[a-z])r\b',仅匹配前面为小写字母的末尾r。
修改后完整代码
import re text="Her sweet-natured father is constantly henpecked by his domineering wives, who rule their domains with iron fists. His wives were named Alexis, Eris, Irer, Zenith and Saunder." # 完全匹配所有以r结尾的单词使用这行 # text=re.sub(r'r\b','rh',text) # 保留Her不变、和预期输出完全一致使用这行 text=re.sub(r'(?<=[a-z])r\b','rh',text) print(text)
运行输出结果
Her sweet-natured fatherh is constantly henpecked by his domineering wives, who rule theirh domains with iron fists. His wives were named Alexis, Eris, Irerh, Zenith and Saunderh.
内容的提问来源于stack exchange,提问作者MsBonniePython
相关产品推荐
相关产品推荐

