【问题标题】:how to search a string with spaces within another string in python?如何在python中的另一个字符串中搜索带有空格的字符串?
【发布时间】:2021-09-15 11:12:14
【问题描述】:

我想从 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

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您也可以使用这样的正则表达式方法:

    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)。

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

    如果Glist 中有太多项目,您可以利用正则表达式树(请参阅here 如何使用trieregex 库来生成此类尝试。)

    【讨论】:

      【解决方案2】:

      似乎您实际上并不需要正则表达式。只是通常的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. 
      

      【讨论】:

      • 嗨,谢谢,但这不是硬匹配字符串。例如,如果有一个像“ADATA”这样的词。它也是空白
      【解决方案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)
      

      【讨论】:

      • 嗨,谢谢,但这不是硬匹配字符串。例如,如果有一个像“ADATA”这样的词。它也是空白的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2021-11-28
      • 2013-01-18
      • 1970-01-01
      • 2012-03-05
      相关资源
      最近更新 更多