如何根据破折号前后的字符数删除破折号?
我的代码:
1:
re.sub(r"(\S)\-", r'\1 ', 'test 10 MF-MT this FOR test')
输出:test 10 MF MT this FOR test
在这里我根据需要删除了破折号
2:
re.sub(r"(\S)\-", r'\1 ', 'test 10 M-M this FOR test')
输出:test 10 M M this FOR test
但是正如您在此处看到的那样,我不想删除破折号,因此我需要在破折号之前和之后指定两个字符以将其删除。
我已经尝试过类似的方法,但是没有用
re.sub(r"(\S).{2}\-.{2}", r'\1 ', 'test 10 M-M this FOR test')
有帮助吗?
答案 0 :(得分:2)
使用后向和向前看:
(?<=\S\S)-(?=\S\S)
匹配短划线(连字符),该破折号前后必须恰好有2个非空白字符。
代码:
>>> import re
>>> reg = re.compile(r'(?<=\S\S)-(?=\S\S)')
>>> reg.sub(' ', 'test 10 MF-MT this FOR test')
'test 10 MF MT this FOR test'
>>> reg.sub(' ', 'test 10 M-M this FOR test')
'test 10 M-M this FOR test'