【问题标题】:specific searching in python?在 python 中进行特定搜索?
【发布时间】:2011-01-06 18:33:45
【问题描述】:

有什么方法可以搜索和替换某些字符串,同时还要注意相似的字符串,而不是替换那些?

例如,如果我有

self.a
self.b
self.c
self.d
self.e
self.f
self.g

我想要

self.a
self.__b
self.c
self.__d
self.__e
self.f
self.g

我想将__ 添加到一些变量中以使其成为私有变量,而不是其他变量,我将如何做到这一点,而不是单独更改每个变量,或者更改所有变量然后撤消我不想要的变量?我的程序有大量的变量并且经常使用它们,所以我不想自己浏览代码。

【问题讨论】:

  • 这不是一个编辑问题而不是 Python 问题吗?例如,您可以使用编辑器将所有“self.b”替换为“self.__b”,或以类似方式使用 sed。

标签: python string replace


【解决方案1】:

Regular expressions?

Python's re module 有一个名为 re.sub 的函数,它将用其他东西替换匹配模式的所有内容。

您还可以根据自己的喜好使用来自 Perl、awk、sed 等的正则表达式。只需根据您可能想要匹配和更改的任何模式进行搜索和替换。

【讨论】:

  • +1 用于 sed。单行可能比编写 Python 脚本更有效且更容易。
【解决方案2】:

备份您的脚本。创建一个新脚本和import re,然后 re.sub() 你的原始脚本。对正则表达式脚本运行单元测试以确保功能正常。

【讨论】:

    【解决方案3】:

    除了创建另一个脚本来执行替换之外,您还可以在编辑器中执行此操作。例如,如果您使用 Vim,键入以下内容应该可以满足您的要求:

    :%s/self\.\(b\|d\|e\)/self.__\1/g
    

    【讨论】:

    • 如果你不使用 Vim,但使用 Unix/Linux 命令行,试试sed 's/self\.\(b\|d\|e\)/self.__\1/g' your_python_module.py
    【解决方案4】:

    正则表达式是你的朋友。不过,它们对初学者来说有点密集。要完成上述示例中的目标,请使用 python 命令:

    import re
    pattern = r'(self\.)(b|d|e)\s'
    result = re.sub(pattern, '\1__\2', source)
    

    这需要以“self”开头的字符串的每个实例。后跟 b、d 或 e,并将其替换为 'self.__' 后跟正确的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 2013-07-24
      • 1970-01-01
      • 2015-09-15
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多