gpt4 book ai didi

Python 正则表达式 findall() 返回不需要的子字符串(包括正确答案)

转载 作者:太空宇宙 更新时间:2023-11-03 20:59:34 27 4
gpt4 key购买 nike

我必须编写一个 python 函数,它获取一行代码作为输入,如果该行包含三元运算符(并对它们进行计数!),则返回 true,否则返回 false。我写了几个版本的正则表达式,在这个网站 https://regexr.com/ 上完美运行。 ,但例如在 Google Colab 上,它们都不起作用。

def ternaryOp(line):
found_operator=re.findall(r'(((=|==|<|>|<=|>=|!=)[\s\t]*)?[\s\t]*.+[\s\t]*\?[\s\t]*((.+:.*)|(.*:.+)))',line)
if found_operator:
print(len(found_operator))
print(found_operator)
return True
else:
return False


ternaryOp('category=age<18?child:adult')

预期结果:

1
[('category=age<18?child:adult')]
True

实际结果:

6
[('category=age<18?child:adult', '', '', 'child:adult', 'child:adult', '')]
True

最佳答案

正在做exactly what it's supposed and documented to do :

If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group. Empty matches are included in the result.

您的正则表达式有 6 个捕获组,因此每个匹配都是一个 6 元组,元组的每个元素都是一个捕获组。要么使用它,要么对您不特别关心的组使用非捕获组 ((?:pattern)),或者使用 re.finditer 生成 < em>匹配对象,从而获得更丰富、更灵活的结果。

顺便说一下,你的工作效率非常低,如果你只是想知道可以在字符串中找到某个模式,请使用 re.matchre.search,您在此处发布的代码不需要 findall 的功能,因为您只是检查它是否找到了任何内容。

关于Python 正则表达式 findall() 返回不需要的子字符串(包括正确答案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55797289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com