2015-05-07 67 views
0

我試圖用regex來匹配2條規則。我已經嘗試過在各種情況下進行測試,給了我不想要的結果。用於字符串匹配的Python正則表達式

規則如下:

  1. 查找包含數字的所有字符串(整數,小數和負值在內)
  2. 查找有沒有數值的所有字符串。這是指特殊字符,如@#$%^ & *()

所以在我試圖符合這些規則,我得到這個:

def rule(word): 
    if re.match("\W", word): 
    return True 
    elif re.match("[-.\d]", word): 
    return True 
    else: 
    return False 

Input: output測試如下

word = '972.2' : True

word = '-88.2' : True

word = '8fdsf' : True

word = '86fdsf' : True我希望這是假

word = '&^(' : True

有一些更多的測試,但我只是想表明一個我想返回False。看起來它只是匹配第一個字符,所以我試圖改變正則表達式,但這使情況變得更糟。

+0

對於識別號,它是簡單的使用'嘗試/ except'用'數=浮子(字符串) ' – Paul

回答

0

由於documentation表示,re.match將返回一個MatchObject,每當字符串的開始與正則表達式匹配時,它總是計算爲True

因此,您需要在正則表達式中使用錨以確保只有整個字符串匹配計數,例如, [-.\d]$(注意美元符號)。

編輯:加上什麼最大說 - 使用+所以你的正則表達式不會只匹配一個字母。

0

你的正則表達式(它們都是)只看你的字符串的第一個字符。更改它們以在末尾添加+$以確保您的字符串是只有由目標字符組成。

0

據我瞭解,你需要排除所有除1和2

試試這個:

import re 

def rule(word): 
    return True if re.search("[^\W\d\-\.]+", word) is None else False 

結果上提供的樣品:

  • 972.2:真
  • - 88。2:真
  • 8fdsf:假
  • 86fdsf:假
  • & ^(:真
相關問題