使用python将数字替换为字符串中的字符

时间:2017-08-09 10:08:56

标签: python-3.x

我有一个像这样的字符串

        convert_text = "tet1+tet2+tet34+tet12+tet3"

我想从上面的字符串中将数字替换成字符。这个映射列表可以单独使用。当我尝试用字符'g'替换数字1时使用如下替换

       import re
       convert_text = convert_text.replace('1','g')
       print(convert_text)

输出

      "tetg+tet2+tet34+tetg2+tet3"

如何区分单位数和两位数值。有没有办法处理Regexp或其他什么?

2 个答案:

答案 0 :(得分:2)

您可以使用带有可调用替换参数的正则表达式来用查找表中的值替换连续的数字运行,例如:

import re

# Input text
convert_text = "tet1+tet2+tet34+tet12+tet3"

# to->from of digits to string
replacements = {'1': 'A', '2': 'B', '3': 'C', '12': 'T', '34': 'X'}

# Do actual replacement of digits to string
converted_text = re.sub('(\d+)', lambda m: replacements[m.group()], convert_text)

这给了你:

'tetA+tetB+tetX+tetT+tetC'

答案 1 :(得分:0)

import re
convert_text = "tet1+tet2+tet34+tet12+tet3"
pattern = re.compile(r'((?<!\d)\d(?!\d))')
convert_text2=pattern.sub('g',convert_text)

convert_text2 Out [2]:&#39; tetg + tetg + tet34 + tet12 + tetg&#39;

你必须在括号之间使用负向前瞻和负面的后视模式

(?!pat) and 
(?<!pat),  

你有同样的=而不是!对于积极向前看/后看。

编辑:如果你需要替换数字字符串,正则表达式是

pattern2 = re.compile(r'\d+')

在任何模式中,您都可以用您需要的特定数字替换\。