我想在Python中創建一個小的文本限制程序。基本上,用戶輸入文本,一些過濾器(一個字母,一個數字等)。用戶可以將過濾器(a和n爲字母數字等),但我偶然發現了這一點:蟒蛇:正則表達式匹配的字符串,只有字符串
if re.match("[a-zA-Z]", textToRestrict):
return True
else:
return False
這就是事情土崩瓦解。據推測,只有字母作爲過濾器,程序將只接受字符串,如dance
。然而,if語句仍返回true
如果textToRestric
了,說,dance1234
(不正確),而1234dance
將返回false
(正確的)。相反,如果我通過[0-9]
測試數字,它仍然會返回true
,即使它包含字母字符(假定字符不是第一個字符)也將返回true
。
如何使用正則表達式僅匹配某種類型,並以這種方式添加另一種類型(如類型字符串+類型數字)允許這兩種類型返回true
?
UPDATE:這是我用於多個過濾器的方法:
regex = ""
if FilterClass.ALPHABETIC in arguments:
regex += "[a-zA-Z]"
if FilterClass.CAPITAL_ALPHABETIC in arguments:
regex += "[A-Z]"
if FilterClass.NUMERIC in arguments:
regex += "\d"
if FilterClass.SPECIAL_CHARACTERS in arguments:
regex += "[^0-9a-zA-Z]*"
if FilterClass.DASH_UNDERSCORES in arguments:
regex += "[-_]*"
regall = "^(" + regex + ")+$"
if re.match(regall, textToRestrict):
return True
else:
return False
arguments
是由用戶輸入的參數。 if語句檢查那裏的內容,據推測,可以爲正則表達式字符串添加更多模式。
爲什麼不使用'str.isalpha() '和'str.isdigit()'? – SirParselot
您正則表達式不檢查位置上它是在字符串中,並沒有對匹配以外的任何一個字符'^ [A-ZA-Z]更多+從開始到結束$'比賽,上一個或者更多匹配的字母出現直到字符串的結尾。 –
@SirParselot,因爲理想情況下,只要用戶使用合適的過濾器,用戶可以輸入字母,數字,特殊字符或這些字符的任意組合。我不確定'isalpha()'和'isdigit()'可以用於那個。 –