比较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”(使用“%”和“_”)的主要内容,如果未能解决你的问题,请参考以下文章