Python使用正则为逗号、横杠等符号前后加空格且排除特定格式
原有代码的问题
- 正则语法逻辑错误:你在捕获组和断言之间加入了行首匹配符
^,这个符号只用于匹配字符串起始位置,放在此处直接导致后续断言完全失效。 - 断言规则设计错误:你尝试在匹配到所有符号后,再判断符号前后是否存在
C-GOOD这类完整字符串,而没有直接判断当前匹配的符号本身是否属于例外场景,所以只能得到全匹配或全不匹配的结果。 - 规则设计冗余:
.、,本身不会出现在C-GOOD这类例外内容中,不需要和-放在同一条正则里处理,拆分处理可以大幅降低正则复杂度。
解决方案
你的例外规则核心是:仅前后均为大写英文字母的横杠不需要加空格,其余的.、,、-都需要前后加空格,按这个逻辑写正则即可。
可运行代码
import re def format_text(text): # 处理.和,,统一前后加空格 text = re.sub(r'([.,])', r' \1 ', text) # 处理横杠:排除前后均为大写字母的场景,其余横杠前后加空格 text = re.sub(r'(?<![A-Z])-(?![A-Z])', r' - ', text) # 若需要合并多余连续空格可取消注释下一行 # text = re.sub(r'\s+', ' ', text) return text # 测试用例 print(format_text("hello-goodbye C-GOOD")) print(format_text("100.89 D-FARM"))
运行结果
hello - goodbye C-GOOD 100 . 89 D-FARM
内容的提问来源于stack exchange,提问作者SamSaidYes
相关产品推荐
相关产品推荐

