簡體   English   中英

Python正則表達式用於字符串匹配

[英]Python Regex for string matching

我試圖與regex匹配兩個規則。 我已經嘗試過在各種情況下進行測試,從而給我帶來了不良結果。

規則如下:

  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。 似乎只匹配第一個字符,因此我嘗試更改正則表達式的表達式,但這會使情況變得更糟。

文檔所述re.match將返回一個MatchObject ,當字符串的開頭與正則表達式匹配時,該對象總是計算為True

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

編輯:加上馬克斯說的-使用+所以您的正則表達式將不只是匹配單個字母。

您的正則表達式(兩者)僅查看字符串的第一個字符。 更改它們以在末尾添加+$ ,以確保您的字符串由目標字符組成。

據我了解,您需要排除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:錯誤
  • &^(:正確

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM