使用正则表达式替换去除姓名列表中开头的Mr前缀问题求助
问题原因
你写的正则^(Mr)(.*)$会将Mr之后的所有内容(包括紧随Mr的空格)都捕获到第二分组$2中,所以替换后自然会多出前置空格。
修复方案
调整正则,把Mr后面跟随的空白字符排除到目标捕获组外即可,推荐两种写法:
- 分组捕获法
正则写为:^Mr\s*(.*)$,替换内容填$1\s*会匹配Mr之后的任意数量空白字符(1个空格、多个空格、制表符都可兼容),剩下的姓名内容会被捕获到第一分组中,替换后就不会有多余空格。 - 零宽断言法(无需替换分组,直接保留匹配内容)
正则写为:(?<=^Mr\s).*,替换内容直接填$0即可,该写法只会匹配Mr之后的姓名内容,不需要额外处理前缀。
两种方案最终的输出都和你预期的结果完全一致:
James Kolt Tony jr Wilson
内容的提问来源于stack exchange,提问作者Maxxx
相关产品推荐
相关产品推荐

