[英]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)
順便說一句,僅在每次迭代中打印term
和message
就可以使錯誤變得明顯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.