我有一个字符串如下:
void func( str **s1, int *i, str *s2)
我想写一个正则表达式,它会找到str
后跟*
个字符数的出现,并将它们放在括号中,如下所示:
void func( (str **) s1, int *i, (str *) s2)
答案 0 :(得分:3)
这适用于给定的例子:
s = 'void func( str **s1, int *i, str *s2)'
print re.sub(r'\b(str\s+[*]+)', r'(\1) ', s)
给出:
void func( (str **) s1, int *i, (str *) s2)
用任意字符串替换str
:
items = ['str1', 'str2']
print re.sub(r'\bstr\s+([*]+)',
lambda x: r'({} {}) '.format(items.pop(0), x.group(1)), s)
得到:
void func( (str1 **) s1, int *i, (str2 *) s2)
答案 1 :(得分:0)
x="void func( str **s1, int *i, str *s2)"
print re.sub(r"(str) ([^a-zA-Z0-9]+)",r"(\1 \2) ",x)
这可以按预期工作。
答案 2 :(得分:0)
请参阅以下正则表达式替换:
re.sub(r'str\W+', r'(\0) ', str)
这是一个更短更有效的正则表达式。
>>> import re
>>> str ="void func( str **s1, int *i, str *s2)"
>>> e = re.sub(r'str\W+', r'(\0) ', str)
>>> e
'void func( (str **) s1, int *i, (str *) s2)'