我试图创建一个函数,该函数根据某些条件检查字符串的有效性。基于某些条件的字符串的有效性
条件:
- 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)'等等 –