1 回答

TA贡献1825条经验 获得超4个赞
如果模式中存在一个或多个捕获组,则返回组列表;如果模式有多个组,这将是一个元组列表。
您的正则表达式包含一个捕获组,因此findall
永远不会为[A-Z]
正则表达式返回任何内容。更改([a-u]|[w-z])
为(?:[a-u]|[w-z])
查看差异:
>>> this_WFF = "(P) & ~(~(Q → (R & ~S)))"
>>> def clean(formula):
... formula = formula.strip()
... formula = re.sub("\( +", "(", formula)
... formula = re.sub(" +\)", ")", formula)
... formula = re.sub("(?P<b_ops>[&v→↔])", " " + "\g<b_ops>" + " ", formula)
... formula = re.sub("[ ]+", " ", formula)
... # Make an inventory of literals for the original formula.
... orig_lit_inv = re.findall("[~]*[A-Z]([a-u]|[w-z]){0,}", formula)
... print(orig_lit_inv)
...
>>> clean(this_WFF)
['', '', '', '']
>>> def clean(formula):
... formula = formula.strip()
... formula = re.sub("\( +", "(", formula)
... formula = re.sub(" +\)", ")", formula)
... formula = re.sub("(?P<b_ops>[&v→↔])", " " + "\g<b_ops>" + " ", formula)
... formula = re.sub("[ ]+", " ", formula)
... # Make an inventory of literals for the original formula
... orig_lit_inv = re.findall("[~]*[A-Z](?:[a-u]|[w-z]){0,}", formula)
... print(orig_lit_inv)
...
>>> clean(this_WFF)
['P', 'Q', 'R', '~S']
由于现在正则表达式不包含捕获组findall,因此只需在结果中返回“组 0”(即整个匹配项)的内容。
添加回答
举报