简体   繁体   English

如何将 function 传递给 python 中的 re.findall()

[英]how to pass a function to re.findall() in python

I have a list of words that I want to search in a string of large text.I have defined a function that returns each individual word but I dont know how to pass the function to re.findall().我有一个要在大文本字符串中搜索的单词列表。我定义了一个返回每个单独单词的 function,但我不知道如何将 function 传递给 re.findall()。 I want to get any sentense that contains any word that is in words list.我想获得包含单词列表中任何单词的任何句子。 Can someone assist:) here is what I got:有人可以帮忙:)这是我得到的:

strings = ['some large text', 'some large text'...]
ad = []
words = ['ascertained','deep','detected','disclosed','disinterred','espied','explored','exposed','famous','happened upon','identified','invented','learned','observed','perceived','presented','revealed','searched out','shown','sighted','spotted','unveiled']
def word():
    for i in words:
        t = word[i]
    return t

for i in range(len(strings)):
    ad += re.findall(r"([^.]*?word()[^.]*\.)",strings[i])
sep = ''
adc = sep.join(ad)

Do you want something like this:你想要这样的东西:

strings = ['some large text', 'some large text', 'dont disclosed it']
words = ['ascertained','deep','detected','disclosed','disinterred','espied','explored','exposed','famous','happened upon','identified','invented','learned','observed','perceived','presented','revealed','searched out','shown','sighted','spotted','unveiled']

reg = re.compile("(?=(" + "|".join(map(re.escape, words)) + "))")
ad = [i for i in strings if len(re.findall(reg,i))]
ad = ', '.join(ad)

ad:广告:

'dont disclosed it'

OR或者

strings = ['my name is D.', 'I am 18 years old', 'I love deep learning', 'detected something fishy'] 
ad = []
words = ['ascertained','deep','detected','disclosed','disinterred','espied','explored','exposed','famous','happened upon','identified','invented','learned','observed','perceived','presented','revealed','searched out','shown','sighted','spotted','unveiled']

for i in range(len(strings)):
    ad += [strings[i] for word in words if len(re.findall(f"([^.]*?{word}[^.]*)", strings[i]))]

Output: Output:

ad:广告:

['I love deep learning', 'detected something fishy']
for i in range(len(strings)):
    ad += [re.findall(f"([^.]*?{word}[^.]*\.)", strings[i]) for word in words]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM