根据字符数删除破折号

时间:2020-07-13 19:51:12

标签: python regex

如何根据破折号前后的字符数删除破折号?

我的代码:

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')

有帮助吗?

1 个答案:

答案 0 :(得分:2)

使用后向和向前看:

(?<=\S\S)-(?=\S\S)

匹配短划线(连字符),该破折号前后必须恰好有2个非空白字符。

RegEx Demo

代码:

>>> 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'