我的目标是将下面的代码从A函数重新格式化为B函数,这意味着使用Log.d代码语句替换StringBuilder语句。
public void A() {
int i = 0;
StringBuilder sb = new StringBuilder();
sb.append("i Counter:");
sb.append(i);
Log.d(TAG, sb.toString());
int j = 0;
StringBuilder sb1 = new StringBuilder();
sb1.append("i Counter:");
sb1.append(i);
sb1.append(" j Counter:");
sb1.append(j);
Log.d(TAG, sb1.toString());
}
public void B() {
int i = 0;
Log.d(TAG, "i Counter" + i);
int j = 0;
Log.d(TAG, "i Counter" + i + " j Counter" + j);
}
我正在考虑使用正则表达式来匹配append()调用中的内容。 但是附加行是未知的,可能在1到N之间。
python regex是解决此问题的好工具吗?
如果不是最好的语言是什么?
答案 0 :(得分:2)
您可以将re.sub
与替换功能一起使用,该替换功能将append
调用中的所有字符串与+
连接起来:
import re
def build(m):
return ''.join((m.group(3), ' + '.join(re.findall(r'%s\.append\((.*)\);' % m.group(1), re.sub(r'^(?!\s+%s\.append\b).*' % m.group(1), '', m.group(2), flags=re.MULTILINE | re.DOTALL))), ');'))
print(re.sub(r'StringBuilder (\w+) = new StringBuilder\(\);(.*?)(Log.d\(\w+, )\1\.toString\(\)\);', build, s, flags=re.DOTALL))
所以给定:
s = '''public void A() {
int i = 0;
StringBuilder sb = new StringBuilder();
sb.append("i Counter:");
sb.append(i);
Log.d(TAG, sb.toString());
int j = 0;
StringBuilder sb1 = new StringBuilder();
sb1.append("i Counter:");
sb1.append(i);
sb1.append(" j Counter:");
sb1.append(j);
// no matching below
sb1.append(x);
Log.d(TAG, sb1.toString());
}'''
此输出:
public void A() {
int i = 0;
Log.d(TAG, "i Counter:" + i);
int j = 0;
Log.d(TAG, "i Counter:" + i + " j Counter:" + j);
}