我想使用正则表达式和Python为我的函数添加一个额外的参数。
我的功能如下:
mail(arg1, arg2, arg3, arg4);
任何人都可以帮助使用正则表达式来获得此结果:
mail(arg1, arg2, arg3, arg4, arg5);
我有一个总体想法:
import os, fnmatch
for path, dirs, files in os.walk(os.path.abspath('directory')):
for filename in fnmatch.filter(files, '*.php'):
filepath = os.path.join(path, filename)
with open(filepath) as php:
i = php.read()
i = i.sub(re, re, line)
with open(filepath,"w") as f:
f.write(i)
答案 0 :(得分:0)
假设您没有进行复杂的多行解析,并且您的参数不是带有空格或逗号的表达式,并且参数之间的空格是一致的,这里是一个天真的正则表达式:
re.sub(r'(mail\(\S+, \S+, \S+)\);', '\\1, arg4);', src)
您可能希望用\S+
包围\s*\S+\s*
,以便灵活地在每个参数周围留出空白。
它还将捕获可能命名为foomail
的函数,因此您可能希望在表达式的开头添加必需的空格(r' (mail...'
)。这不会捕捉到行的开头,所以你还需要(r'^(mail...'
)
解析和正则表达式匹配是两个截然不同的学科。我理解有时候需要快速而又脏的东西来改变一堆代码,所以我希望这会有所帮助。
请务必先复制一份。
答案 1 :(得分:0)
我想提出一个与你要求的答案不同的答案。
考虑其他几种选择。假设第五个参数始终相同,则还有其他几种方法。
(1)写一个新的函数调用。我们称之为newmail
。
function newmail($arg1, $arg2, $arg3, $arg4) {
return mail($arg1, $arg2, $arg3, $arg4, "My constant 5th argument");
}
现在将所有mail()
次来电更改为newmail()
(2)使第五个参数成为现有mail()
中的默认参数:
(这也可以在上面的解决方案(1)中完成)
function mail($arg1, $arg2, $arg3, $arg4, $arg5 = "My constant 5th argument") {
[...]
}