替换<。。。>子串

2024-09-30 16:33:15 发布

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

提前谢谢。 我想用其他字符替换特定字符串中的空格,比如“_”或“~”,或者只删除空格,但只用于某些字符之间的子字符串,比如“< >”或“" "”。例如

config snmp trapreceiver create < community name > < trap receiver IP >

应该变成:

config snmp trapreceiver create < community_name > < trap_receiver_IP >

任何帮助都将不胜感激。你知道吗


Tags: 字符串namecommunityipconfigcreate字符snmp
3条回答

有一种更简单的方法来完成这个任务(如果您不熟悉regex以及如何在Python中使用lambda)

Python有一组丰富的内置字符串函数,可以帮助您处理字符串,看看this它可以帮助您入门。你知道吗

回答您的问题:

这是我的密码:

a = 'community name'
b = 'trap_receiver_IP'

c = 'config snmp trapreceiver create < community name > < trap receiver IP >'
s = c.find( "<" )

def replaceSpace( stringToBeReplaced ):
    aa = stringToBeReplaced.replace( " ", "_" )
    print( aa )
    return aa

def replaceDash( stringToBeReplaced ):
    bb = stringToBeReplaced.replace( "_", " " )
    print( bb )
    return bb

def getSubstring( stringToBeProcessed, stringResult = None ):


    string = stringToBeProcessed
    resultlst = []
    for i in range(0, 2):
        start = string.find( "<" )
        end = string.find( ">" )

        result = string[ start+2 :end-1 ]
        resultlst.append( result )
        string = stringToBeProcessed[end+1:]

    return resultlst 

subStringLst = getSubstring('config snmp trapreceiver create < community name > < trap receiver IP >' )

subStringLst[0] = replaceSpace( subStringLst[0] )
subStringLst[1] = replaceDash( subStringLst [1] )

finalStr = c[:s] + "<" + subStringLst[0] + ">" + " <" + subStringLst[1] + ">"
print( finalStr )

如果您想尝试不使用regex,那么下面是纯python方法:

data="""config snmp trapreceiver create < community name > < trap receiver IP > sql things also comes in because < sammm name >"""

splitted_data=data.split()

chunks=[]

def _approach(list_):
    flag=True
    store=[]
    track=[]
    previous=[]
    for i,j in enumerate(list_):
        if j=='<':
            if previous:
                chunks.append(previous)
            previous=[]
            track.append(i)
            flag=False

            store.append(j)
        elif j=='>':
            store.append('>')
            chunks.append(store)
            track=[]
            flag=True
            store=[]
        elif flag==False:
                store.append(j)
        else:
            previous.append(j)





_approach(splitted_data)


new_final=[]

for j,i in enumerate(chunks):
    if i[0]=='<':
        new_final.append(i[0]+"_".join(i[1:-1])+i[-1])
    else:
        for ia in i:
            new_final.append(ia)

print(*new_final)

输出:

config snmp trapreceiver create <community_name> <trap_receiver_IP> sql things also comes in because <sammm_name>

使用正则表达式:

import re
s = """config snmp trapreceiver create < community name > < trap receiver IP >"""
print(re.sub('\<.*?\>', lambda x: '_'.join(x.group(0).replace("< ", "<").replace(" >", ">").split()), s))

输出:

config snmp trapreceiver create <community_name> <trap_receiver_IP>

相关问题 更多 >