代码之家  ›  专栏  ›  技术社区  ›  Bubba

如何查找列表中的任何内容是否在字符串中,并确定“任何内容”是什么?

  •  0
  • Bubba  · 技术社区  · 8 年前

    我需要读取用户输入并将其解析为3部分,第一部分是行值,第二部分是条件(=、!=、>等),第三部分是比较值。 用户输入:0==“2014年6月1日0:00:00”->因此,行为0,条件为“==”,比较值为“6/1/2014 0:00:00”

    以下是我所拥有的:

        promptList = ["0 == 6/12/16 00:00:00", "1 > 47.20"]
        for prompt in promptList:
        if any(comparator in prompt for comparator in comparatorsList):
            prompt = prompt.split(comparator)
            row = prompt[0].strip()
            condition = prompt[1].strip()
            comparator = str(comparator).strip()
            print(row, comparator, condition) #test to see print statement, not needed
    

    然而,它说我没有定义比较器。我需要一个比较器来知道如何分割字符串,因为你永远不知道比较器会出现在哪里(即:0==0) VS。 20124>6/2/12 00:32:10)

    如何设置我的3个变量!

    2 回复  |  直到 8 年前
        1
  •  0
  •   lemonhead    8 年前

    变量 comparator 在生成器理解范围内,不存在于生成器理解范围之外。而不是使用 any 构造,它在这里丢弃了有价值的信息,即实际包含哪个比较器,您可以将其扩展为for循环:

    comparatorsList = set(["==", "!=", ">", ">=", "<=", "<"])
    promptList = ["0 == 6/12/16 00:00:00", "1 > 47.20"]
    
    for prompt in promptList:
        for comparator in comparatorsList:
            if comparator in prompt:
                prompt = prompt.split(comparator)
                row = prompt[0].strip()
                condition = prompt[1].strip()
                comparator = str(comparator).strip()
                print(row, comparator, condition) 
                break
    

    打印:

    ('0', '==', '6/12/16 00:00:00')
    ('1', '>', '47.20')
    
        2
  •  0
  •   NickAb    8 年前

    你定义 comparator

    你可以替换

    if any(comparator in prompt for comparator in comparatorsList):
    

    有点像

    comparator = next((x for x in comparatorsList if x in prompt), None)
    if comparator is not None:
    

    也可以简单地使用正则表达式。您没有在左值和右值上指定任何约束,因此我假设它们可以是任何约束:

    import re
    rv = re.match("(.*)(==|!=|>)(.*)", "6 == 2")
    

    rv.groups() 将具有匹配的组,第一组具有左值,第二组具有比较,第三组具有右值。您可以微调此正则表达式以限制左和右值类型。