我想使用 re.sub 从嵌入较大字符串的单引号字符串中删除前导和尾随空格。如果我有,比如说,
textin = " foo ' bar nox ': glop ,' frox ' "
我要生产
desired = " foo 'bar nox': glop ,'frox' "
删除前导空格相对简单。
>>> lstripped = re.sub(r"'\s*([^']*')", r"'\1", textin)
>>> lstripped
" foo 'bar nox ': glop ,'frox ' "
问题是删除尾随空格。例如,我尝试过,
>>> rstripped = re.sub(r"('[^']*)(\s*')", r"\1'", lstripped)
>>> rstripped
" foo 'bar nox ': glop ,'frox ' "
但这失败了,因为 [^']*
匹配尾随的空格。
我考虑过使用回溯模式,但 Re 文档说它们只能包含固定长度的模式。
我确定这是一个以前解决过的问题,但我很困惑。
谢谢!
编辑:该解决方案需要处理包含单个非空白字符和空字符串的字符串,即 ' p ' --> 'p'
和 ' ' --> ''
。
最佳答案
[^\']*
- 是贪婪的,即它还包括空格和/或制表符,所以让我们使用非贪婪的:[^\']*?
In [66]: re.sub(r'\'\s*([^\']*?)\s*\'','\'\\1\'', textin)
Out[66]: " foo 'bar nox': glop ,'frox' "
较少转义版本:
re.sub(r"'\s*([^']*?)\s*'", r"'\1'", textin)
关于Python re.sub 去除引号内的前导/尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773804/