如何在python中搜索另一个字符串中包含空格的字符串?

2024-09-30 02:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从python中的“XYZ masked 111”或“Hello My Add”等其他句子中搜索并删除包含“masked 111”、“My Add no”等单词的句子。我该如何做? 我试图对下面的代码进行更改,但由于空格的原因无法正常工作

def garbagefin(x):
k = " ".join(re.findall("[a-zA-Z0-9]+", x))
print(k)
t=re.split(r'\s',k)
print(t)
    
Glist={'masked 111', 'DATA',"My Add no" , 'MASKEDDATA',}
    
for n, m in enumerate(t):  ##to remove entire ID 
    if m in Glist:
        return ''
    else:
        return x

我期望的结果是:

garbagefin("I am masked 111")-Blank
garbagefin("I am My Add No")-Blank
garbagefin("I am My add")-I am My add
garbagefin("I am My MASKEDDATA")-Blank

Tags: noinreaddreturnmyam句子
3条回答

如果您只是想从另一个字符串中找到一个字符串,我认为您甚至不需要使用这种混乱的代码。另外,您可以将密钥字符串存储在数组中

您可以简单地使用in方法和return

def garbagefin (x):
    L=["masked 111","DATA","My Add no", "MASKEDDATA"]
    for i in L:
        if i in x:
            print("Blank")
            return
    print(x)

看起来你实际上不需要正则表达式。只是通常的in操作符

def garbagefin(x):
    return "" if any(text in x for text in Glist) else x

如果匹配不区分大小写,请与小写文本进行比较

Glist = set(map(lambda text: text.casefold(), Glist))
...
def garbagefin(x):
    x_lower = x.casefold()
    return "" if any(text in x_lower for text in Glist) else x

输出

1. 
2. 
3. I am My add
4. 

您也可以使用如下的正则表达式方法:

import re

Glist={'masked 111', 'DATA',"My Add no" , 'MASKEDDATA',}
glst_rx = r"\b(?:{})\b".format("|".join(Glist))

def garbagefin(x):
    if re.search(glst_rx, x, re.I):
        return ''
    else:
        return x

Python demo

glst_rx = r"\b(?:{})\b".format("|".join(Glist))代码将生成\b(?:My Add no|DATA|MASKEDDATA|masked 111)\b正则表达式(参见online demo

它将以不区分大小写的方式(注意re.search(glst_rx, x, re.I)中的re.I标志)将Glist中的字符串作为整字进行匹配,一旦找到,将返回一个空字符串,否则将返回输入字符串

如果Glist中的项太多,可以利用正则表达式trie(请参见here如何使用trieregex库生成这样的尝试。)

相关问题 更多 >

    热门问题