2010-04-06 21 views

回答

5
import re 
text = "this isn't alphanumeric" 
result = re.sub(r'\W','-',text) # result will be "this-isn-t-alphanumeric" 

\W類是\w類,它由字母數字字符和下劃線([a-zA-Z0-9_])的倒數。因此,用短劃線代替與\W不匹配的任何字符將會爲您提供一個只包含字母數字,下劃線和破折號的字符串,適用於URL。

+0

他也許想用下劃線代替下劃線。 – jemfinch 2010-04-06 23:47:09

+0

這是可能的。如果是這種情況,那麼'r'[\ W - ]'將會很容易完成。 – Amber 2010-04-06 23:49:29

1

此響應不使用正則表達式,但也應該可以工作,並更好地控制要過濾的符號類型。它使用unicodedata模塊通過檢查字符的類別來刪除所有符號。

import unicodedata 

# See http://www.dpawson.co.uk/xsl/rev2/UnicodeCategories.html for character categories 
replace = ('Sc', 'Sk', 'Sm', 'So', 'Zs') 
def symbolsReplaceDashes(text): 
    L = [] 
    for char in text: 
     if unicodedata.category(unicode(char)) in replace: 
      L.append('-') 
     else: L.append(char) 
    return ''.join(L) 

您可能需要使用類似urllib.quote(output.encode('utf-8'))如果範圍超出基本ASCII字母數字字符的字符進行編碼。

1

而不是正則表達式,如果你想逃避一個字符串用於一個URL,使用urllib.quote()urllib.quote_plus()。對於更復雜的查詢,您可能需要使用urllib.urlencode()來構建url。您可以通過urllib.unquote()urllib.unquote_plus()來反轉報價。

+0

由於OP要求的東西是有損轉換,我的猜測並不是他們想逃避字符串,更多的是他們想要從諸如帖子標題等等的東西中生成「漂亮」的URL。 – Amber 2010-04-07 04:05:17

相關問題