我在Python 3.3中使用模塊re
來處理正則表達式。用戶給我的程序一個字符串(應該是正則表達式),它必須使用該正則表達式。如何知道一個字符串是否是Python中的正則表達式?
我認爲這是不可能的,但是,有什麼方法可以知道一個字符串是否是一個有效的正則表達式?
謝謝!
我在Python 3.3中使用模塊re
來處理正則表達式。用戶給我的程序一個字符串(應該是正則表達式),它必須使用該正則表達式。如何知道一個字符串是否是Python中的正則表達式?
我認爲這是不可能的,但是,有什麼方法可以知道一個字符串是否是一個有效的正則表達式?
謝謝!
您可以簡單地嘗試使用re.compile()
編譯正則表達式,如果正則表達式無效,則會拋出re.error
。
try:
re.compile(regex)
except re.error:
# not valid
非常感謝! – forvas
我認爲,試圖re.compile()
和捕獲錯誤是最有用的方法,但根據正則表達式可以多麼複雜,也有可能是可以使用正則表達式來測試一個給定的字符串是一個正則表達式...
(但我覺得來描述所有有效的Python的正則表達式,你至少需要context free grammar)
非常感謝! – forvas
你可以試一試終於中編譯它。當用戶意外地生成一個有效的正則表達式時,這不會捕獲用例,但當他提供一個無效的正則表達式時,它會捕獲任何實例。你可以嘗試用有效的'[1-9]'來代替無效的'++'字符串,以查看它的工作。
import re
try:
r = re.compile('++')
except:
print 'Invalid Regex'
else:
print 'Regex valid'
不確定要使用此功能,但要注意某些正則表達式可能導致拒絕服務;讓用戶輸入您要使用的正則表達式並不明智 – Unknown