匹配仅开头或仅结尾带hyphen单词的Regex不生效,如何修正?
问题原因
- 原正则使用
(\s+|^)、(\s+|$)作为边界匹配,匹配命中时会同时吃掉单词前后的空格,导致相邻的符合规则的单词因为缺少分隔空格无法被匹配 - 直接替换为空会导致正常单词之间残留多余空白
- 代码未导入
re模块,运行时会直接报错
修正方案
改用零宽断言匹配边界,不会占用空白字符,匹配完成后再统一清理多余空白即可,完整实现代码如下:
import re def begin_end_hyphen_removal(line): # 匹配仅开头带连字符、仅结尾带连字符的独立单词 pattern = r'(?<!\S)-[a-zA-Z]+(?!\S)|(?<!\S)[a-zA-Z]+-(?!\S)' # 先删除符合规则的单词,再清理多余空白 res = re.sub(pattern, '', line) res = re.sub(r'\s+', ' ', res).strip() return res
测试效果
将你提供的测试文本传入该函数,输出结果为:
here are some word sub-words sub-word2 example another one
完全符合保留中间带连字符的单词、删除仅首尾带连字符单词的要求。
内容的提问来源于stack exchange,提问作者M.A.G
相关产品推荐
相关产品推荐

