【问题标题】:Removing Trailing White Spaces with python使用python删除尾随空格
【发布时间】:2013-06-25 09:40:43
【问题描述】:

我有一个脚本在 python 中循环多个搜索/替换正则表达式,其中一个操作是删除尾随空格 我试过了:

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

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

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

我找到了几个简单推荐使用 strip 的答案,我的问题是我想将它集成到正则表达式替换机制中。

【问题讨论】:

  • 为什么都是三引号? r"\s+$" 可以正常工作。
  • 为什么要将这个集成到正则表达式替换机制中?没有明显的理由这样做。
  • @rmunn 这只是为了强制正常表达不起作用,包括你的,SlaterTyranus 因为我已经有了它,我不想在单独的循环中逐行移动只是为了这样做, 和
  • @MysticOdin 您是否将sub 的结果分配回str?否则str 永远不会改变。
  • @m.buettner 是的,该脚本适用于字典中的所有正则表达式,除了这个,我实际上不在字典和它之前和之后的条目中间

标签: python regex python-2.7


【解决方案1】:

函数为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()

【讨论】:

  • +1 for rstrip,绝对是这里的正确选择。知道这两者的表现如何吗?
  • @MysticOdin 仍然需要提供输入字符串。否则,re 怎么知道要替换哪个字符串?
  • 我知道 r strip 是简单删除尾随空格的正确选择,问题是这个脚本在文件上运行,而不是逐行运行,并且从表达式字典中进行多次搜索/替换
  • 脚本中的行类似于re.sub(Exp, RepExp, FileDump, re.M),但它在循环中,我不想共享不必要的代码
  • 这个例子删除了多个换行符。
【解决方案2】:

这使用正则表达式删除尾随空格:

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)

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多