我試圖創建一個函數,該函數根據某些條件檢查字符串的有效性。基於某些條件的字符串的有效性
條件:
- 0-9傳遞一個數字作爲字符串(前 '1')將設置有效期爲True。
- 將0-9 + *中的數字作爲字符串傳遞(例如'9 *','2 *')將設置爲True。
- 在括號中傳遞一個0-9 + * +數字0-9(例如'(9 * 1)','(1 * 3)')的字符串將被設置爲True。
- 通過以上任何[除了2] + * +以上任何[括號內的2]將被設置爲True。 ((9 * 1)* 1)
傳入的任何內容都會導致設置爲False。
下面是我做了什麼:
CHARS = "*"
NUMBERS = ""
def validity(s):
valid = False
# Condition 1
if s in NUMBERS:
valid = True
# Condition 2
elif s in [c1 + CHARS for c1 in NUMBERS]:
valid = True
# Condition 3
elif s in ['(' + c1 + CHARS + c2 + ')' for c1 in NUMBERS for c2 in NUMBERS]:
valid = True
return valid
我有1-3個條件才能正常工作。然而,我被卡住的條件是4.
我有一個粗略的想法,但我在使用代碼實現我的想法時遇到了麻煩。
這是我的想法。如果條件4通過, ((9 * 1)* 1)對*符號左邊的字符串運行有效性,並在*符號右邊的字符串上運行有效性,如果兩者均爲真,則條件爲真,因此有效設置爲真正。如果任何人都可以幫助我用真正感激的代碼寫下我的想法。
這裏有一些輸入的輸出:
validity('1') # Condition 1
True
validity('9') # Condition 1
True
validity('10') # Doesn't satisfy any of the conditions
False
validity('1*') # Condition 2
True
validity('4*') # Condition 2
True
validity('9*') # Condition 2
True
validity('10*') # Doesn't satisfy any of the conditions
False
validity('(3*4)') # Condition 3
True
validity('(3*9)') # Condition 3
True
validity('(4*9)') # Condition 3
True
validity('(10*9)') # Doesn't satisfy any of the conditions
False
validity('(3*2)*(3*1)') # Condition 4
True
validity('(3*2)*8') # Condition 4
True
validity('(3*2)*z') # Doesn't satisfy any of the conditions
False
@Wooble謝謝你,我會改變那些現在。 – Sc4r
正則表達式可能可以在單個re.search中執行此操作 – Trent
算術操作是由上下文無關語法生成的,因此只有一個正則表達式只有在他不想繼續解析這樣的事情時纔有效:'(3 *(3 * 2))*(3 * 1)','(3 *(3 *(3 * 2)))*(3 * 1)'等等 –