在php中的re.sub中的Eval代码

时间:2013-04-20 15:35:20

标签: python

在PHP中可以做到

$str = preg_replace("~^(<.*?>)([0-9a-zа-яё]){1}(.*?)~eu", "'$1 '.mb_strtoupper('$2', 'UTF-8').'$3'", $str);

我怎么能在python中做到这一点?

我试试这个,但它没有用..

str=re.sub("~^(<.*?>)([0-9a-zа-яё]){1}(.*?)~eu", "\\1 \\2.upper()\\3")

1 个答案:

答案 0 :(得分:1)

使用可执行任意功能的字符串存在安全风险。相反,你可以提供一个函数而不是一个完成整个事情的字符串。

def repl(match):
    return "{0} {1}{2}".format(match.group(1), match.group(2).upper(), match.group(3))

text = re.sub("~^(<.*?>)([0-9a-zа-яё]){1}(.*?)~eu", repl, text)

另请注意,str不是字符串的好名称,因为它会隐藏str内置函数。