Python 正则问题,只保留第一个匹配

时间:2022-03-27 05:43:49
有一个字符串,里面有很多个匹配的字符。
我想只保留第一个匹配,把第二个、第三个以及后面的匹配字符删除。
请问这个怎么写?

如,把s中的 zz 删除掉,只保留第一个匹配到的zz

import re

p = re.compile('zz')
s = 'aafzzfdewzzfwwzzfessszz'

7 个解决方案

#1


import re
k='zz'
p = re.compile(k)
s = 'aafzzfdewzzfwwzzfessszz'
s1 = s[0:s.find(k)+len(k)] + p.sub('',s[s.find(k)+len(k):len(s)])

切一下再替换?

#2


import re
p = re.compile('zz?')
s = 'aafzzfdewzzfwwzzfessszz'
print(p.search(s).group())

#3


import re
p = re.compile('zz')
s = 'aafzzfdewzzfwwzzfessszz'
s1 = (p.split(s))
s1.insert(1, 'zz')
print(''.join(s1))

抱歉,审错题了.小白一个,取完了再插回去行不行啊

#4


import re

s = 'aafzzfdewzzfwwzzfessszz'

data = re.match(r'.*?zz',s).group(0)
info= s[len(data):]

data1 = re.sub(r'zz','',info)
data = data+data1
print(data)
先找到第一个可以匹配的地方,然后在将后面的字符串取出来,利用sub替换掉,在把2个字符串加上

#5


要什么结果呢?

#6


第一个匹配的什么是不是没说清楚?按说直接用find就是找第一个匹配项,关键看你正则匹配模式怎么写

#7


来膜拜一下大神吧 Python 正则问题,只保留第一个匹配


import re 
def repl(mch, cnt=[0]):
    cnt[0] += 1
    if cnt[0] == 1:
        return mch.group(0)
    else:
        return ''

s = 'aafzzfdewzzfwwzzfessszz'
print(re.sub(r'(zz)',repl, s))

# aafzzfdewfwwfesss

#1


import re
k='zz'
p = re.compile(k)
s = 'aafzzfdewzzfwwzzfessszz'
s1 = s[0:s.find(k)+len(k)] + p.sub('',s[s.find(k)+len(k):len(s)])

切一下再替换?

#2


import re
p = re.compile('zz?')
s = 'aafzzfdewzzfwwzzfessszz'
print(p.search(s).group())

#3


import re
p = re.compile('zz')
s = 'aafzzfdewzzfwwzzfessszz'
s1 = (p.split(s))
s1.insert(1, 'zz')
print(''.join(s1))

抱歉,审错题了.小白一个,取完了再插回去行不行啊

#4


import re

s = 'aafzzfdewzzfwwzzfessszz'

data = re.match(r'.*?zz',s).group(0)
info= s[len(data):]

data1 = re.sub(r'zz','',info)
data = data+data1
print(data)
先找到第一个可以匹配的地方,然后在将后面的字符串取出来,利用sub替换掉,在把2个字符串加上

#5


要什么结果呢?

#6


第一个匹配的什么是不是没说清楚?按说直接用find就是找第一个匹配项,关键看你正则匹配模式怎么写

#7


来膜拜一下大神吧 Python 正则问题,只保留第一个匹配


import re 
def repl(mch, cnt=[0]):
    cnt[0] += 1
    if cnt[0] == 1:
        return mch.group(0)
    else:
        return ''

s = 'aafzzfdewzzfwwzzfessszz'
print(re.sub(r'(zz)',repl, s))

# aafzzfdewfwwfesss