2012-05-25 80 views
2

我弄清楚如何使用以下函數刪除蟒蛇特殊的非字母數字字符:如何刪除非字母數字字符在python,但保留一些特殊字符

p_nonalphanum = re.compile('\W+') 

def removeNonAlphaNum(string): 
     m = p_nonalphanum.match(string) 
     if m: 
      string = string[m.end():] 
     return string 

我想保留,雖然如一些特價字符½,¾我認爲是數字。我應該如何編輯我的正則表達式?

e.g: from "• ½ cup flour" to "½ cup flour"

+1

確定任何分數,這到目前爲止對你有用嗎? '>>> removeNonAlphaNum(' - hello - ')' ''hello-'' – jamylak

+0

只有在字符串中開始的非字母數字字符對我很重要,但這可能會延長 – tiguero

回答

2
>>> def remove_unwanted(s): 
...  '''• ½ cup flour -> ½ cup flour''' 
...  allowed = '[\w½¾]+' 
...  return ' '.join(re.findall(allowed, s)) 
... 
>>> print remove_unwanted('• ½ cup flour ->') 
½ cup flour 
3

您可以使用一個否定的字符類,並添加你想保持

所有字符你可以做這樣的事情:

p_nonalphanum = re.compile('[^\w½¾]+') 
print (p_nonalphanum.sub('', test)) 
+0

這聽起來像是第一個好的解決方案,因爲我想編輯我的正則表達式,但我有這個錯誤消息:SyntaxError:文件中的非ASCII字符'\ xc2' – tiguero

+0

好吧,我只需要在我的python腳本中添加第一行:# - * - coding:utf-8 - * - – tiguero

2

不要用正則表達式,其中手動打擾你添加你想要的每個字符,使用內建的isalnum函數!

>>> s = "• ½ cup flour -> ½ cup flour" 
>>> def only_alphanum(s): 
...  s = unicode(s, "utf-8") 
...  return ' '.join(c for c in s.split() if c.isalnum()) 
... 
>>> print only_alphanum(s) 
½ cup flour ½ cup flour 

這將讓你捕捉,而不只是你已經在你的正則表達式組合(這可能長期做下去很快)的分數列表

>>> s = "• ¼ cup oats -*(*&!!" 
>>> print only_alphanum(s) 
¼ cup oats 
相關問題