Python正则表达式和字符串替换

2024-06-25 23:47:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Python中转换字符串,例如:

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

进入

^{pr2}$

现在在大多数情况下,我可以使用whilestring.find()和{}的简单组合来完成这项工作,因为我不需要干预变量名(例如outputlength),但是我不知道要替换这些字符串:

double db4nsfy[]-->;double[] db4nsfy

double[] VdSGV-->;double[] VdSGV

我该怎么做?我知道我会用Python中的一些regex的RTFM来找到答案,但是我希望从一个实际的例子开始。在


Tags: 字符串gtoutputstring情况findlengthint
3条回答

您可以使用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+)\[\]匹配两个包装在捕获组和括号中的“单词”。在
  • \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)

这是一种没有正则表达式的直观方法。在

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)

相关问题 更多 >