Python正则表达式替换,使用lambda函数,覆盖非捕获组

时间:2013-12-11 10:55:15

标签: python regex lambda

我在Python中有这个代码(其中_l是我正在迭代的一些PHP代码的每一行):

_l = re.sub(r'(?:\=\s*|\=\>\s*|\(\s*|\s)(true|false|null)(?:\s*\)|\s*\;|\s*\,)', lambda pattern: pattern.group(1).upper(), _l)

它的目的是将某些原语替换为大写,就像这样(在PHP中):

$variable = true; // Old
$variable = TRUE; // New

但相反,我明白了:

$variable TRUE

基本上我只想替换捕获的组并忽略两个非捕获组。这可能是非常明显的,但我是一个Python新手:)

谢谢!

2 个答案:

答案 0 :(得分:2)

_l = re.sub(r'(?:\=|\=\>|\()\s*(true|false|null)\s*(?:\)|\;|\,)', lambda pattern: pattern.group(0).upper(), _l)

这应该做。但是,正如另一个所说,正则表达式不适合PHP。

答案 1 :(得分:1)

对于上面的示例,可以只替换每个= true;

php_script.replace('= true;', '= TRUE;')

同样适用于其他需求。

但是,正如@elusive指出的那样,正则表达式并不适合解析PHP文件。一个好的文本编辑器可以做到这一点。