Python re.sub 去除引号内的前导/尾随空格

标签 python regex

我想使用 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/

相关文章:

javascript - 字符串中重复部分的正则表达式

sql - 如何在 PostgreSQL 中获取字符串中正则表达式匹配的位置?

java - 正则表达式 严格匹配以模式开头的单词

python - Scipy最小化错误: 'numpy.float64' object is not callable

python - 使用类装饰器,如何在不重新定义类的情况下重写方法?

python - 如何使用 Selenium Python headless 运行 Microsoft Edge?

python - 在tornado-botocore服务器上达到max_clients限制错误

python - Pandas 将多个数据框合并并更新为一列

ruby - 正则表达式前瞻/后视评论

c++ - 检查一个正则表达式是否覆盖另一个正则表达式