簡體   English   中英

python匹配變量組

[英]python match variable groups

我的目標是將下面的代碼從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是解決此問題的好工具嗎?

最好的語言是什么?

您可以將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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM