使用Python去除字符串末尾的空格

4

我有一个Python脚本,循环执行多个搜索/替换正则表达式操作,其中之一是去除末尾空格。 我已经尝试过:

re.sub(r"""\s+$""", '', str)

re.sub(r""" +$""", r"""""", str)

并且

re.sub(r""" +$""", r"""""", str, re.M)

我发现有些答案只是建议使用strip,但我的问题是我想将其整合到正则表达式替换机制中。


4
为什么要用三重引号?r"\s+$"就可以了。 - rmunn
3
你为什么希望将这个整合到正则表达式替换机制中呢?似乎没有明显的理由这样做。 - Slater Victoroff
@rmunn 这只是为了强制执行正常表达式不起作用,包括你的表达式在内,SlaterTyranus因为我已经有它了,我不想单独逐行移动以执行此操作。 - Mystic Odin
@MysticOdin 你有把 sub 的结果重新赋值给 str 吗?否则 str 就永远不会改变了。 - Martin Ender
@MysticOdin,你的意思是什么?这就是为什么我在我的答案版本中传递了0,这不会跳过count - Martin Ender
显示剩余5条评论
2个回答

9
该函数是sub,它以目标字符串作为参数(并返回修改后的副本):
str = re.sub(r'\s+$', '', str)

如果您想要从单个字符串中删除多行的尾随空格,请使用以下其中之一:

str = re.sub(r'\s+$', '', str, 0, re.M)
str = re.sub(r'\s+$', '', str, flags=re.M)

0count参数,其中0表示没有限制,然后re.M使得$匹配行末。如果您不明确指定flags,则需要该额外的参数,因为flags实际上是第五个参数。

请注意,仅对于多行字符串,您才需要使用三引号。重要的是模式中的r

或者,可以使用rstrip删除尾随空格:

str = str.rstrip()

2
+1 对于 rstrip 来说,绝对是这里的正确选择。这两个函数的性能表现有什么想法吗? - Slater Victoroff
@MysticOdin,你仍然需要提供输入字符串。否则,re 怎么知道要替换哪个字符串呢? - Martin Ender
脚本中的那一行类似于 re.sub(Exp, RepExp, FileDump, re.M),但它在一个循环内部,我不想分享不必要的代码。 - Mystic Odin
@MysticOdin 嗯,看起来那段代码是必要的。 - Martin Ender
1
这个例子可以去除多个换行符。 - ideasman42
显示剩余2条评论

1

使用正则表达式可以去除尾部空格:

import os
import re
PATH = '/path/to/source'

re_strip = re.compile(r'[ \t]+(\n|\Z)')

for path, dirs, files in os.walk(PATH):
    for f in files:
        file_name, file_extension = os.path.splitext(f)
        if file_extension == '.py':
            path_name = os.path.join(path, f)
            with open(path_name, 'r') as fh:
                data = fh.read()

            data = re_strip.sub(r'\1', data)

            with open(path_name, 'w') as fh:
                fh.write(data)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接