2024-09-28 21:00:07 发布
网友
例如,有一个类似aaaaaab的字符串,其中a重复n次(在本例中,n=6)。我怎么能得到n号?你知道吗
aaaaaab
a
如果我想用n来代替它,使a变成n/2倍,比如aaab,或者n-2倍aaaab。怎么处理?你知道吗
aaab
aaaab
单靠正则表达式是做不到的。但是您可以使用正则表达式来提取a的字符串,然后检查其长度。你知道吗
然后您可以创建一个适当长度的替换字符串并进行替换。你知道吗
要将出现n次的文本模式替换为重复n/2次的相同模式,可以执行以下操作:
n
n/2
>>> import re >>> text = 'aaaaaab' >>> re.sub('aa', 'a', text) 'aaab'
如果模式不是一个文本匹配,这就不起作用,也没有办法让它只使用正则表达式。您可以使用re.finditer,并根据匹配中的信息将它们替换为所需的内容。你知道吗
re.finditer
例如,要替换为n/2次,可以执行以下操作:
>>> text = 'aaaaaab something else aaaab' >>> matches = list(re.finditer('a+', text)) >>> displ = 0 >>> for match in matches: ... num_repeat = match.end() - match.start() #depending on the pattern ... text = text[:match.start() - displ] + 'a' * (num_repeat // 2) + text[match.end() - displ:] ... displ += num_repeat // 2 ... >>> print text aaab something else aab
或替换为n-2出现次数:
n-2
>>> text = 'aaaaaab something else aaaab' >>> matches = list(re.finditer('a+', text)) >>> displ = 0 >>> for match in matches: ... num_repeat = match.end() - match.start() ... text = text[:match.start() - displ] + 'a' * (num_repeat - 2) + text[match.end() - displ:] ... displ += 2 ... >>> print text aaaab something else aab
s = 'aaaaabbcdddddddd' [(m.group(1), len(m.group(2))+1) for m in re.finditer(r'(\w)(\1*)', s)]
退货
[('a', 5), ('b', 2), ('c', 1), ('d', 8)]
要使用它替换字符组,请执行以下操作:
re.sub(r'(\w)(\1*)', lambda m: m.group(1)*f(len(m.group(2))+1), s)
使用:
f = lambda x: x - 2 # returns 'aaadddddd' f = lambda x: x / 2 # returns 'aabdddd' f = lambda x: x + 1 # returns 'aaaaaabbbccddddddddd'
单靠正则表达式是做不到的。但是您可以使用正则表达式来提取
a
的字符串,然后检查其长度。你知道吗然后您可以创建一个适当长度的替换字符串并进行替换。你知道吗
要将出现
n
次的文本模式替换为重复n/2
次的相同模式,可以执行以下操作:如果模式不是一个文本匹配,这就不起作用,也没有办法让它只使用正则表达式。您可以使用
re.finditer
,并根据匹配中的信息将它们替换为所需的内容。你知道吗例如,要替换为
n/2
次,可以执行以下操作:或替换为
n-2
出现次数:退货
要使用它替换字符组,请执行以下操作:
使用:
相关问题 更多 >
编程相关推荐