Python 根据字符数删除破折号

Python 根据字符数删除破折号,python,regex,Python,Regex,如何根据破折号前后的字符数删除破折号 我的代码: 1: 输出:test 10 MF MT本次测试 在这里,我已经删除了破折号,因为我需要 2: 输出:测试10米,此测试为 但是正如你在这里看到的,我不想删除破折号,所以我需要在破折号之后和之前指定两个字符来删除它 我试过类似的方法,但没有成功 re.sub(r"(\S).{2}\-.{2}", r'\1 ', 'test 10 M-M this FOR test') 有什么帮助吗?使用“向后看”和“向前看”: (?<

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

我的代码:

1:

输出:
test 10 MF MT本次测试

在这里,我已经删除了破折号,因为我需要

2:

输出:
测试10米,此测试为

但是正如你在这里看到的,我不想删除破折号,所以我需要在破折号之后和之前指定两个字符来删除它

我试过类似的方法,但没有成功

re.sub(r"(\S).{2}\-.{2}", r'\1 ', 'test  10  M-M this FOR test')

有什么帮助吗?

使用“向后看”和“向前看”:

(?<=\S\S)-(?=\S\S)
(?>>导入re

>>>reg=re.compile(r’(?使用向后看和向前看:

(?<=\S\S)-(?=\S\S)
(?>>导入re

>>>reg=重新编译(r'(?你能澄清你想达到什么目的吗?@WiktorStribiżew根据破折号前后的字符数删除破折号什么字符?你期望得到什么结果以及为什么?你可以使用它。@WiktorStribiżew因为两个字符对我来说意味着单位,所以我不想删除字符串上的任何破折号,只删除单位之间的破折号请澄清您试图实现的目标?@WiktorStribiżew根据前后的字符数删除破折号什么字符?您希望得到什么结果以及原因?您可以使用@WiktorStribiżew,因为两个字符对我来说意味着单位,所以我不想删除字符串上的任何破折号,只删除单位之间的破折号为什么不
([^\s]{2})-([^\s]{2})
?因为这样我们就必须捕获值并在替换中使用回代引用,而在这里我们只使用单个空格进行替换。还要注意,如果要匹配两个字符的完整单词,则首选
([^\s]{2})([^\s]{2})
?因为这样我们就必须捕获值并在替换中使用反向引用,而在这里,我们只在替换中使用一个空格。还要注意,如果要匹配两个字符的完整单词,则首选
(?)?
(?<=\S\S)-(?=\S\S)
>>> 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'