字符串中连续字符的正则表达式

时间:2014-08-12 06:32:26

标签: python regex

我有一个字符串如下:

void func( str **s1, int *i, str *s2)

我想写一个正则表达式,它会找到str后跟*个字符数的出现,并将它们放在括号中,如下所示:

void func( (str **) s1, int *i, (str *) s2)

3 个答案:

答案 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)

这是一个更短更有效的正则表达式。

View a regex demo!

>>> 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)'