2017-04-08 56 views
0

通過替換字符串中間全部*我想替換所有「A」的字符串由「*」中間使用正則表達式在Python 我想這使用正則表達式

re.sub(r'[B-Z]+([A]+)[B-Z]+', r'*', 'JAYANTA ') 

但它輸出 - '*安踏'

我希望它是 'Ĵ* Y * NTA'

有人可以提供所需的代碼?如果可能,我想解釋我的代碼中有什麼問題。

+0

在字符串或單詞的中間?如果一個單詞的意思是,使用'r'\ BA \ B''。 –

回答

2

使用非wordboundary \B
爲了確保A是由單詞字符包圍:

import re 
str = 'JAYANTA POKED AGASTYA WITH BAAAAMBOO ' 
str = re.sub(r'\BA+\B', r'*', str) 
print(str) 

打印:

J*Y*NTA POKED AG*STYA WITH B*MBOO 

另外,如果你想更具體的,它必須由大寫包圍字母。您可以使用lookbehead和lookahead。

str = re.sub(r'(?<=[A-Z])A+(?=[A-Z])', r'*', str) 
+0

對我的代碼中的錯誤有幫助嗎? –

+0

這是因爲您的代碼還會將圍繞A的字符帶入比賽。並因此取而代之。這就是查找方便的地方,因爲這些不會被納入比賽,只是一個檢查,如果它在那裏。 – LukStorms

+0

你的正則表達式給出'* ANTA'作爲輸出的原因是因爲用*代替'JAY'之後沒有其他匹配。 – LukStorms

1
>>> re.sub(r'(?!^)[Aa](?!$)','*','JAYANTA') 
'J*Y*NTA' 

我一個一個正則表達式搜索,但它不能在字符串的開頭(?!^),而不是在字符串的結尾(?!$)。

+0

替換字符串中的所有'A',而不是在字符串的開頭或結尾:*我想用字符串**中的所有'A'**替換'*'* –

+0

好的,閱讀您的文章太快。更新了正則表達式。 – Casper

+0

字符串末尾有一個空格。在這種情況下,你的正則表達式替換了最後一個A. – Toto

1

先行斷言:

>>> re.sub(r'A(?=[A-Z])', r'*', 'JAYANTA ') 
'J*Y*NTA ' 

在情況下,如果字開始,以 'A' 結尾:

>>> re.sub(r'(?<=[A-Z])A(?=[A-Z])', r'*', 'AJAYANTA ') 
'AJ*Y*NTA ' 
+0

好的解決方案,但是會裁剪'A',如果它在字符串中的索引0。 –

+0

@ Mr.Xcoder對於這種情況,您需要檢查兩邊'>>> re.sub(r'(?<= [AZ])A(?= [AZ])',r'*','AJAYANTA' ) 'AJ * Y * NTA'' – Hackaholic