【问题标题】:Compare strings in python like the sql "like" (with "%" and "_")比较python中的字符串,如sql“like”(使用“%”和“_”)
【发布时间】:2014-11-26 17:27:19
【问题描述】:

我在 python 中有一个包含一些字符串的列表,我需要知道列表中的女巫项目就像“A1_8301”。这个“_”表示可以是任何字符。 有没有快速的方法来做到这一点?

如果我使用的是 SQL,我只需输入类似“where x like "A1_8301”的内容

谢谢!

【问题讨论】:

    标签: python string


    【解决方案1】:

    正则表达式可能是要走的路。 IIRC,% 应该映射到 .*_ 应该映射到 .

    matcher = re.compile('^A1.8301$')
    list_of_string = [s for s in stringlist if matcher.match(s)]
    

    【讨论】:

    • 好点,虽然只有字符串开头的子字符串,因为我们使用的是re.match而不是re.search...无论如何,我已经更新了。
    • 是的,我为此添加了它。
    【解决方案2】:

    在 Python 中,您会使用正则表达式:

    import re
    
    pattern = re.compile(r'^A1.8301$')
    matches = [x for x in yourlist if pattern.match(x)]
    

    这会生成一个符合您要求的元素列表。

    • 需要^$ 锚来防止子字符串 匹配;例如,BA1k8301-42 不应匹配。 re.match() 调用只会在测试字符串的开头匹配,但使用 ^ 会使其更加明确,并很好地反映了字符串结尾锚点的 $
    • SQL like 中的_ 被翻译成.,意思是匹配一个字符

    【讨论】:

    • 谢谢!非常喜欢解说。学了一点正则表达式!
    • 有没有办法只用一个字符串而不是一个列表来做到这一点,或者我应该创建一个项目列表?
    • @Antonio:你的意思是你有一个更长的字符串,其中包含这些模式?然后删除^$锚点并使用pattern.findall(longer_string);这会给你一个匹配列表。
    • 是的。 Findall 是我需要的。谢谢。
    猜你喜欢
    • 2011-12-24
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多