比较python中的字符串,如sql“like”(使用“%”和“_”)

Posted

技术标签:

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

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

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

谢谢!

【问题讨论】:

【参考方案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 是我需要的。谢谢。

以上是关于比较python中的字符串,如sql“like”(使用“%”和“_”)的主要内容,如果未能解决你的问题,请参考以下文章

python中的mysql数据库like模糊查询

如何模糊查找姓李的SQL语句

MySql 模糊查询范围查询

mysql模糊查询

在sql语句中,like所有的用法

MySql—模糊查询