替换python 2.7中的部分字符串

时间:2014-12-07 00:54:40

标签: python string python-2.7 replace

我为不恰当的主题标题道歉,但我不知道如何定义它。

我有一个字符串,如下所示:

string = 'b<3 and d >4 or 4<=a <20'

我想将此上面的字符串更改为以下字符串:

new_string = 'b[n]<3 and d[n] >4 or 4<=a[n] <20'

使用string.replace函数似乎不成功(例如:string.replace(&#39; d&#39;,&#39; d [n]&#39;),正如其他部分一样字符串也被修改(例如结果:&lt; b&lt; 3&lt; 3&n; d [n]&gt; 4或4&lt; = a&lt; 20&#39;))。 我想知道蟒蛇是否会“py”模块对于这项工作是真实的吗?

我正在使用python 2.7。 谢谢。

1 个答案:

答案 0 :(得分:2)

使用re.sub;捕获组和反向引用:

>>> import re
>>> re.sub(r'\b([a-z])\b', r'\1[n]', 'b<3 and d >4 or 4<=a <20')
'b[n]<3 and d[n] >4 or 4<=a[n] <20'

[a-z]匹配字母字符。 \b用于确保变量名称被word boundary包围;使模式只匹配单字符变量名。

(...)是使模式为captured as a group(第一组),并且可以在替换字符串中引用为\1

<强>更新

如果要替换任何变量名,可能需要检查匹配的部分是否为有效变量。以下示例使用keyword.iskeyword检查匹配的变量名称是否不是关键字。

>>> import re
>>> import keyword
>>>
>>> def replace_var(m):
...     varname = m.group()
...     if keyword.iskeyword(varname) or varname[0].isdigit():
...         return varname
...     return varname + '[n]'
...
>>> re.sub(r'\w+',  replace_var, 'b<3 and d >4 or 4<=a <20')
'b[n]<3 and d[n] >4 or 4<=a[n] <20'

注意:替换可以是一个功能,如上所示;函数获取匹配对象,函数的返回值用作替换字符串。