【问题标题】:Change single/multiple character to another single character将单个/多个字符更改为另一个单个字符
【发布时间】:2012-07-14 09:39:30
【问题描述】:

例如,我有一个这样的字符串:

my_string = 'a hello aaaaa hi aaaaaaa bye bbb'

我想将'a''a's 更改为'b'。所以我想要的输出是:

changed_string = 'b hello b hi b bye bbb'

我尝试使用替换,然后将多个'b's 转换为单个'b',但它会影响最初在字符串中的多个'b's。

我不想要前 n 个字符那样的答案。

有什么建议吗?

【问题讨论】:

    标签: python string replace character


    【解决方案1】:
    >>> import re
    >>> my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
    >>> re.sub(r'a+', 'b', my_string)
    'b hello b hi b bye bbb'
    

    【讨论】:

    • 很抱歉再次问您,但是当我将句点(.)转换为其他内容时遇到问题。(例如,b)如果我使用 re.sub(r'.+', 'b', my_string) 结果是 b...我该怎么办???
    • @H.Choi 那是因为. 是一个特殊字符,默认匹配除换行符以外的任何字符。使用\.+ 之类的反斜杠将其转义。您可以在此处查看所有特殊字符:docs.python.org/library/re.html。如果对您有帮助,也请接受我的回答:D
    【解决方案2】:

    使用正则表达式。

    根据您的工具,它可能是一行代码或 2-3 行代码。

    使用 vim

    s/a+/b/g
    

    --

    哦,没注意到是蟒蛇。见 jamylak 的回答。

    【讨论】:

      【解决方案3】:

      不使用正则表达式你可以做到这一点,虽然我宁愿使用正则表达式,因为在这种情况下它更清晰、更快。

      >>> from itertools import groupby
      >>> my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
      >>> ''.join(''.join(g) if k != 'a' else 'b' for k, g in groupby(my_string))
      'b hello b hi b bye bbb'
      

      【讨论】:

        【解决方案4】:
        >>> mystring = 'a hello aaaaa hi aaaaaaa bye bbb'
        >>> ' '.join('b' if set(i)==set(['a']) else i for i in mystring.split())
        'b hello b hi b bye bbb'
        

        请注意,虽然这适用于您的示例,但它不适用于重复字符是单词一部分的字符串,例如 'aaaaaz' - 它不会改变这些单词,这可能是可取的,也可能不是可取的。 .

        【讨论】:

        • 这里不需要列表理解,删除 [, ] 使其成为生成器。编辑:nvm 我不认为它会那么低效,但正则表达式肯定更快
        猜你喜欢
        • 2011-02-19
        • 2018-10-16
        • 1970-01-01
        • 2012-04-04
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        相关资源
        最近更新 更多