编辑:我不能使用python的're'
这是一项作业,因此我不希望代码中的答案,而只是一些正确方向的提示。
我正在尝试编写一个函数,如果字符串s是有效的正则表达式,则返回True。
Examples of valid regex:
'0'
'1'
'2'
'e'
'0*' etc..
'(0*.1*)'
'((0.1).2)'
'(0|1)'
一般规则是,如果r1和r2是有效的正则表达式'('+ r1 +'有效符号'(或|或。)+'r2'+')'有效。
我希望它工作的方式是递归地检查字符串,但我不知道如何正确地执行它。我花了太长时间在这上面,并想知道我是否能得到一些帮助。
我会发布我的代码,但它实际上并不起作用。大部分只是我的想法写下来。打印声明就在那里,所以我知道在通话过程中发生了什么。
def check_regex(s):
values = ['0', '1', '2', 'e']
symbols = ['|', '*', '.']
return (all([i in values if len(i) == 1 else
i[0] in values and i[1] == '*' if len(i) == 2 else
#check_regex([i[0], i[2]]) if len(i) == 3 else
#check_regex([i[0:2], i[3:]]) if len(i) == 5 else
False for i in s]))
def is_regex(s):
bool_list = []
symbols = ['|', '.']
if s.startswith('('):
for i in range(len(s)):
if s[i] in symbols:
r1 = s[1:i]
r2 = s[i + 1:s.find(')', i)]
#if r1.startswith('('):
#r1 = r1[1:]
#if r1.endswith(')'):
#r1 = r1[:-1]
print('r1: {} r2: {}'.format(r1, r2))
bool_list += [check_regex([r1,r2])]
#bool_list += [is_regex(r1)]
#bool_list += [is_regex(r2)]
else:
bool_list += [check_regex([s])]
print(bool_list)
return all(bool_list)
答案 0 :(得分:0)
就个人而言,我会以更容易的方式做到这一点......
def check_regex(s):
try: re.compile(s)
except Exception: return False
return True
基本上,这是EAFP
。尝试将其编译为正则表达式。如果抛出错误,则返回False
。否则,请返回True
。