簡體   English   中英

Python是否將^當作split()中的空白?

[英]Is Python treating ^ as a white space in split()?

我有一個錯誤代碼列表,這些代碼之一是:

Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk

包含%^$符號的任何術語都是變量,我需要用<*>替換全部變量術語。

因此,上面的行應如下所示:

Dial code generated note <*> on stn <*> cct <*>

為此,我寫了:

message = "Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk"
for term in message.split():
    if '^' in term:
        message = message.replace(term, '<*>')
    if '$' in term:
        message = message.replace(term, '<*>')
    if '%' in term:
        message = message.replace(term, '<*>')
print (message)

對於大多數消息,這似乎已經奏效。 但是對於這個例子,我得到:

>>Dial code generated note <*> on stn <*> <*> <*>^<*>_chk^<*>_chk

好像好像將^當作空白一樣,否則整個最后一項應替換為<*> 有人可以告訴我為什么嗎?

您可以拆分並重新組裝所需的部件:

message = "Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk"

message = ' '.join('<*>' if any(item in term for item in '^$%')
                    else term for term in message.split())
print(message)

輸出:

Dial code generated note <*> on stn <*> cct <*>

replace具有第三個參數,以限制替換次數。 在您的情況下,您的問題是由多次使用替換字符串引起的: %d被替換為最后一個單詞。

一個簡單的解決方法是將替換次數限制為1:

message = "Dial code generated note %d on stn ^char, cct %d^cct_chk^cct_chk"
for term in message.split():
    if '^' in term:
        message = message.replace(term, '<*>', 1)
    if '$' in term:
        message = message.replace(term, '<*>', 1)
    if '%' in term:
        message = message.replace(term, '<*>', 1)
print (message)

順便說一句,僅在每次迭代中打印termmessage就可以使錯誤變得明顯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM