0

私は次のようなPythonで文字列を変換しようとしています:

string = 'void demofun(double* output, double db4nsfy[], double VdSGV[], int length)'

の中へ

wrapper = 'void demofun(ref double output, double[] db4nsfy, double[] VdSGV, int length)'

これで、ほとんどの場合、の簡単な組み合わせを使用できwhileます。これは、変数名(またはなど)をいじる必要がないためですが、理解できないのは、これらの文字列を置き換えることです。 :string.find()string.replace()outputlength

double db4nsfy[]->double[] db4nsfy

double[] VdSGV->double[] VdSGV

これはどのようにすればよいですか?Pythonの正規表現のRTFMで答えが見つかることはわかっていますが、実際の例から始めたいと思っています。

4

3 に答える 3

2

あなたが使用することができますre.sub

>>> import re
>>> re.sub(r'(\w+) (\w+)\[\]', r'\1[] \2', string)
    'void demofun(double* output, double[] db4nsfy, double[] VdSGV, int length)'
  • (\w+) (\w+)\[\]キャプチャグループと括弧で囲まれた2つの「単語」に一致します。
  • \1そして\2、それらのグループによってキャプチャされたものを参照してください。
于 2013-03-16T05:43:29.393 に答える
1

冗長ですが、正規表現がなく、ポインターと配列の両方を処理します(また正規表現もありません):

def new_arguments(func_string):
    def argument_replace(arguments):
        new_arguments = []
        for argument in arguments.split(', '):
            typ, var = argument.split()
            if typ.endswith('*'):
                typ = 'ref ' + typ.replace('*', '')
            if var.endswith('[]'):
                var = var.replace('[]', '')
                typ += '[]'
            new_arguments.append(' '.join([typ, var]))
        return ', '.join(new_arguments)

    func_name = func_string[:func_string.index('(')]
    arguments = func_string[func_string.index('(')+1:func_string.index(')')]

    return ''.join((func_name, '(', argument_replace(arguments), ')'))

string = 'void demofun(double* output, double db4nsfy[], double VdSGV[], int length)'
print new_arguments(string)
#void demofun(ref double output, double[] db4nsfy, double[] VdSGV, int length)
于 2013-03-16T05:50:38.723 に答える
1

これは、正規表現のない直感的なアプローチです。

s = 'void demofun(double* output, double db4nsfy[], double VdSGV[], int length)'
s = s.split()
for i in range(len(s)):
    if s[i][-3:] == '[],':
        s[i] = s[i][:-3] + ','
        s[i-1] = s[i-1] + '[]'
    elif s[i][-3:] == '[])':
        s[i] = s[i][:-3] + ')'
        s[i-1] = s[i-1] + '[]'
s = ' '.join(s)
print s
# void demofun(double* output, double[] db4nsfy, double[] VdSGV, int length)
于 2013-03-16T05:52:50.340 に答える