2015-12-10 36 views
0

我想匹配一個單詞「無」,如果沒有找到我需要引發異常。我已經嘗試使用下面的python代碼。如何在Python中匹配一個單詞,如果不存在如何引發異常?

import re 

    text = "None" 

    match1 = re.match('.*None', text) 
    mat1 = ['None'] 

    if match1 == mat1: 
     print "match found" 
    if match1 != mat1: 
     raise Exception('Not found...') 

但始終我收到以下錯誤:

C:\Users\test\Desktop>python test.py 
     Traceback (most recent call last): 
     File "test.py", line 25, in <module> 
      raise Exception('Not found...') 
    Exception: Not found... 

    C:\Users\test\Desktop> 

任何人都可以請指導我解決這個問題?

回答

2

你絕對需要使用正則表達式嗎?

這似乎更容易:

if "None" not in text: 
    raise Exception('Not found...') 

當然,這只是相匹配的文字「無」,而不是如「沒有」。但是,你的正則表達式的情況也是如此......

+0

@mirisval感謝您的回答。它的工作。但是有例外,它也會拋出這個錯誤「C:\ Users \ test \ Desktop」python test.py Traceback(最近調用最後一次): 文件「test.py」,第21行,在 raise Exception('未找到...') 例外:未找到... C:\ Users \ test \ Desktop>「 – rcubefather

+0

錯誤異常被拋出時,文本中有什麼?這是你想提出的例外,所以也許這是正確的行爲。 – mirosval

+0

@mirisval我的意思是以下錯誤「追溯(最近調用最後一次):文件」test.py「,第21行,在」。有沒有辦法解決這個錯誤不會出現 – rcubefather

1

re.match返回匹配對象而不是列表。

import re 

text = "None" 

match1 = re.match('.*None', text) 

if not match1: 
    raise Exception('Not found...') 
print(match1.group(0)) 
3

當使用正則表達式,一個match方法的結果是與執行其它方法的匹配對象。您甚至可以直接在if-else條件下比較它,以檢查是否執行了任何匹配。

如果你真的想用RE,這樣做的正確方法是:

if 'None' in text: 
    print 'Found None' 
else: 
    raise Exception('None not found') 

if match1: 
    print 'Match found' 
else: 
    raise Exception('Not found...') 

一個檢查None是否存在在一個句子使用in運營商可能更簡單的方法

Python documentation on regular expressions提供了簡單的示例,可以幫助您理解如何使用此模塊。

1

問題是與假設的方式re.match返回值

re.match('.*None', text)

從文檔

re.match(pattern, string, flags=0)

If zero or more characters at the beginning of string match the regular expression pattern, return a corresponding MatchObject instance. Return None if the string does not match the pattern; note that this is different from a zero-length match.

因此if match1 == mat1:永遠是假的,因爲mat1 = ['None']因此你總是讓你的例外。

相關問題