Python 使用通配符字符在字符串中搜索字符串

Python 使用通配符字符在字符串中搜索字符串,python,pandas,dataframe,Python,Pandas,Dataframe,我在查看regex和fnmatch线程,但没有发现类似的问题 用户输入一些字符串,我需要在dataframe中col中的字符串中找到它。字符串有N个字符作为通配符,因此N可以是其他3个字母BWC “BBNBAQWE”中的“bbbbbb”=True 因为N变成了B “qnervrz”中的“QWER”=True 因为N变成了W 字符串可以有不同的大小,据我所知,只有一个N字母可以在该字符串中变形以满足用户的要求 im计划的是根据输出向新列添加真/假值 df['is_present']=df['s

我在查看regex和fnmatch线程,但没有发现类似的问题

用户输入一些字符串,我需要在dataframe中col中的字符串中找到它。字符串有N个字符作为通配符,因此N可以是其他3个字母BWC

“BBNBAQWE”中的“bbbbbb”=True
因为N变成了B

“qnervrz”中的“QWER”=True
因为N变成了W

字符串可以有不同的大小,据我所知,只有一个N字母可以在该字符串中变形以满足用户的要求

im计划的是根据输出向新列添加真/假值

df['is_present']=df['strings'].map(lambda x:get_strings(x,user_val))

一种方法是替换搜索模式中的每个字母,允许使用“N”作为替代

您可以使用列表理解切换所有模式:

raw_pattern = 'QWER'
pattern = ''.join(['(?:' + letter + '|N)' for letter in list(raw_pattern)])
#pattern = '(?:Q|N)(?:W|N)(?:E|N)(?:R|N)' 
然后

如果结果列表不是空的,则在句子中找到模式

编辑: 问题被修改为仅接受“N”,如果它交换“B”、“W”或“C”。 然后我们要创建如下模式:

pattern = ''.join(['(?:' + letter + '|N)' if letter in ('B', 'W', 'C') else letter for letter in list(raw_pattern)])
# pattern = 'Q(?:W|N)ER'
当然,原始示例不匹配,因为R不能替换N。 我们得到:

我们可以通过比较空列表来检查是否匹配某些内容

re.findall(pattern, sentence) == []
>>> True

那么您想检查'QWER'中的任何字符是否在'QNENVFRZ'中?否则,为什么这是真的?我已经编辑了我的例子,并添加了更多关于这个案例的信息,希望能澄清一些只会引起更多混乱的事情。是否只允许对1个字母进行通配符?因此,我们正在寻找
xWER
QxER
QWxR
QWEx
,其中x=任何其他字母?你所说的(B,W,C)是什么意思?更准确地说:如果允许N个字母进行通配符,那么查找任何单个字符(包含Q、W、E或R)都会容易得多。你的意思可能是N_th_?我又编辑了一次对,通配符在字符串列中。然后Patryk有了正确的答案。我会检查一下,我已经编辑了我的帖子。我看到你只为几个字母添加了约束,这些字母被更改为N。然后你只想为(B,W,C)中的X添加(?:X | N)替代项是的,你能编辑你的帖子来进行约束吗,如何从中得到正确/错误的结果呢?顺便说一句,这是毫无疑问的,但当我询问正确/错误时,有两件事让我有点糊涂,因为正如你所说的“如果结果列表不是空的,则在句子中找到了模式。”但是如何为这两个字母添加约束呢
re.findall(pattern, sentence)
>>> []
re.findall(pattern, sentence) == []
>>> True