【问题标题】:Replacing digits with str.replace()用 str.replace() 替换数字
【发布时间】:2013-09-29 23:23:49
【问题描述】:

我想通过用%d 替换数字来创建一个新字符串,例如:

Name.replace( "_u1_v1" , "_u%d_v%d") 

...但数字 1 可以是任何数字,例如 "_u2_v2.tx"

我可以给replace() 一个通配符来期望任何数字吗?赞"_u"%d"_v"%d".tx"

还是我必须做一个正则表达式?

【问题讨论】:

  • 用任何数字替换一个值是没有意义的。你必须定义数字。如果您有一些定义数字或接受输入的函数,请传入保存该值的变量。例如,Name.replace("_u1_v1", "_u" + variableName + "_v" + variableName)。

标签: python replace expression


【解决方案1】:

使用正则表达式:

>>> import re
>>> s = "_u1_v1"
>>> print re.sub('\d', '%d', s)
_u%d_v%d

\d 匹配任何数字 0-9。 re.sub 将数字替换为 %d

【讨论】:

    【解决方案2】:

    只是为了多样化,一些非正则表达式方法:

    >>> s = "_u1_v1"
    >>> ''.join("%d" if c.isdigit() else c for c in s)
    '_u%d_v%d'
    

    或者如果您需要对多个数字进行分组:

    >>> from itertools import groupby, chain
    >>> s = "_u1_v13"
    >>> grouped = groupby(s, str.isdigit)
    >>> ''.join(chain.from_iterable("%d" if k else g for k,g in grouped))
    '_u%d_v%d'
    

    (说实话,虽然我通常是反正则表达式的,但这种情况很简单,我可能会使用它们。)

    【讨论】:

      【解决方案3】:

      使用translate (source) 的解决方案:

      remove_digits = str.maketrans('0123456789', '%%%%%%%%%%')
      '_u1_v1'.translate(remove_digits)  # '_u%_v%'
      

      【讨论】:

        【解决方案4】:

        如果你想删除字符串中的所有数字,你可以使用translate (Removing numbers from string):

        from string import digits
        remove_digits = str.maketrans('', '', digits)
        str = str.translate(remove_digits)
        

        所有功劳归于@LoMaPh

        【讨论】:

          【解决方案5】:

          你不能; str.replace() 仅适用于文字文本。

          要替换模式,请使用正则表达式:

          re.sub(r'_u\d_v\d', '_u%d_v%d', inputtext)
          

          演示:

          >>> import re
          >>> inputtext = '42_u2_v3.txt'
          >>> re.sub(r'_u\d_v\d', '_u%d_v%d', inputtext)
          '42_u%d_v%d.txt'
          

          【讨论】:

            【解决方案6】:
            temp = re.findall(r'\d+', text) 
            res = list(map(int, temp))
            
            for numText in res:
                text = text.replace(str(numText), str(numText)+'U')
            

            【讨论】:

            • 您能解释一下您的解决方案吗?
            • 如果您添加一些对您建议的解决方案的澄清描述,而不是仅提供代码,这将很有帮助。代码可以独立存在,但当你解释为什么做某事而不是仅仅解释如何做时总是会更好。阅读更多关于在这里写一个好的答案:stackoverflow.com/help/how-to-answer
            猜你喜欢
            • 2016-04-26
            • 1970-01-01
            • 2014-04-17
            • 2020-01-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-29
            相关资源
            最近更新 更多