2014-10-13 41 views
5

我要替換在<之間>蟒替換內容尖括號之間(<>)

前內容:

輸入: 這是一個<測試>

輸出: 這是一個< HH>

到目前爲止我有:

test = 'this is a <test>' 
test = re.sub(r'\<[^>]*\>', 'hh', test) 
print (test) 

這將始終清除<>併產生如下輸出:這是一個hh。 但我想要的是:這是一個< HH>

我應該如何修復它

+4

你爲什麼不用''代替呢? – thefourtheye

+0

如果你真的想用它佔位符..並認爲'重新'可以挽救你的生命。您可以嘗試'打印「這是一個{0}」'.format(「hh」).. –

+0

yea ..格式解決了我的問題。 thx – ahri

回答

3

由於thefourtheye表明,一種解決方案是做

newstr = 'hh' 
test = re.sub(r'\<[^>]*\>', '<' + newstr + '>', test) 

但我懷疑有更優化的解決方案re

+0

+1因爲這個「最優化」。 –

1

您可以使用以下方法:

hh = re.sub(r'(?!<)[^<]*(?=>)', 'hh', test) 

demo

這將使用負向前查找所需圖案之前將<匹配,和一個正向前查找匹配後的>,而不捕獲它們。

1

當你的正則表達式組合起來時,你可以在你想要捕獲的部分和括號中放置括號。

以下示例顯示了此方法。要清楚的是,首先用括號定義<>,而之間是未定義大小的單詞的正則表達式。對於替換,您可以回想起第一次捕獲輸入時出現'hh',然後回想第二次捕獲的輸入字符串。通過使用反斜槓\以及後面的實例數來回顧位置。

import re 

test = "<test>" 
myre = r'(<)\w*(>)' 
mysub = r'\1hh\2' 
newstring = re.sub(myre, mysub, string) 
1

您可以使用積極的向前看和向後看。

>>> import re 
>>> test = 'this is a <test>' 
>>> test = re.sub(r'(?<=<)[^><]*(?=>)', r'hh', test) 
>>> print test 
this is a <hh> 

你的正則表達式將匹配這些<>符號。所以它從最終結果中刪除。但使用lookarounds,你可以保持符號不匹配。 Look-arounds是零寬度斷言,不會消耗任何字符。

1
test = 'this is a <test>' 
test = re.sub(r'\<[^>]*\>', '<hh>', test) 
print (test) 

可以簡單地這樣做。

相關問題