Python 正则表达式:删除字母之间非撇号的所有特殊字符

Python 正则表达式:删除字母之间非撇号的所有特殊字符,python,regex,Python,Regex,我有这样一个字符串: s = "i'm sorry, sir, but this is a 'gluten-free' restaurant. we don't serve bread." 我试图用re.sub来替换所有字母之间没有撇号的特殊字符,这样“无麸质”就变成了无麸质,我会保持原样 我试过这个: import re s = re.sub('[^[a-z]+\'?[a-z]+]', ' ', s) 我想说的是,用0或一个撇号,后面跟着一个或多个带空格的字母,来替换

我有这样一个字符串:

s = "i'm sorry, sir, but this is a 'gluten-free' restaurant. we don't serve bread."
我试图用re.sub来替换所有字母之间没有撇号的特殊字符,这样“无麸质”就变成了无麸质,我会保持原样

我试过这个:

import re

s = re.sub('[^[a-z]+\'?[a-z]+]', ' ', s)
我想说的是,用0或一个撇号,后面跟着一个或多个带空格的字母,来替换任何不遵循一个或多个字母模式的字母

这将返回相同的字符串:

i'm sorry, sir, but this is a 'gluten-free' restaurant. we don't serve bread.
我希望:

i'm sorry  sir  but this is a  gluten free  restaurant  we don't serve bread 

您可以将此正则表达式与嵌套的lookahead+lookahead一起使用:

>>> s = "i'm sorry, sir, but this is a 'gluten-free' restaurant. we don't serve bread."
>>> print ( re.sub(r"(?!(?<=[a-z])'[a-z])[^\w\s]", ' ', s, flags=re.I) )
i'm sorry  sir  but this is a  gluten free  restaurant  we don't serve bread
>>s=“对不起,先生,这是一家‘无麸质’餐厅。我们不供应面包。”
>>>印刷品(re.sub(r)(?!)?