2017-01-22 36 views
-1

我有一個字符串,我想用html代碼替換特殊字符。代碼如下:搜索並替換 - 。sub(replacement,string [,count = 0]) - 不替換特殊字符

s= '\nAxes.axvline\tAdd a vertical line across the axes.\nAxes.axvspan\tAdd a vertical span (rectangle) across the axes.\nSpectral\nAxes.acorr' 

p = re.compile('(\\t)') 
s= p.sub('<\span>', s) 
p = re.compile('(\\n)') 
s = p.sub('<p>', s) 

此代碼替換\t字符串與<\\span>而不是<\span>爲要求的代碼。

我測試了regex101.com上的正則表達式模式,它的工作原理。我不明白爲什麼代碼不起作用。

我的目標是使用輸出爲html代碼。 '< \ span>'字符串不被HTML識別爲標籤,因此它是無用的。我必須找到一種方法,用< \ span>替換文本中的\ t,而不是用< \ span>替換。這在Python中是不可能的嗎?我早些時候發佈了一個類似的問題,但是這個問題沒有具體說明我在這裏提出的問題,也沒有明確我的目標是使用正確的文本作爲HTML代碼。收到的答案並不正確,可能是因爲答覆的人是疏忽了這些事實。

+0

不應該只指定一個反斜槓嗎? –

+2

這是怎麼從[你以前的嘗試](http://stackoverflow.com/questions/41793647/search-and-replace-subreplacement-string-count-0-does-not-work-with-spe)?你仍然應該使用'r'raw strings',並且反斜槓實際上並不是關閉元素的有效語法。 – jonrsharpe

+1

另請注意,'<\\span>'是Python代表字符串'<\span>',以清楚說明有反斜槓字符而不是轉義字符。 – jonrsharpe

回答

0

不,它確實工作。這只是你打印的repr。你是在python shell中測試這個嗎?

在Python殼:

>>> '\\' 
'\\' 
>>> print('\\') 
\ 
>>> print(repr('\\')) 
'\\' 
>>> 

殼輸出返回值使用的repr函數(如果它不是None)。爲了克服 這個,你可以使用print函數,它返回None(所以不會被shell輸出),而 不會調用repr函數。

請注意,在這種情況下,你不需要正則表達式。你只要做一個簡單的replace

s = s.replace('\n', '<p>').replace('\t', '<\span>') 

而且,對於您正則表達式,你應該r前綴你的字符串:

compiled_regex = re.compile(r'[a-z]+\s?') # for example 
matchobj = compiled_regex.search('in this normal string') 
othermatchobj = compiled_regex.search('in this other string') 

請注意,如果你不使用你的編譯正則表達式一次以上,你可以做到這一步

matchobj = re.search(r'[a-z]+\s?', '<- the pattern -> the string to search in') 

雖然正則表達式是超級強大的。不要放棄!