我为不恰当的主题标题道歉,但我不知道如何定义它。
我有一个字符串,如下所示:
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。 谢谢。
答案 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'
注意:替换可以是一个功能,如上所示;函数获取匹配对象,函数的返回值用作替换字符串。