gpt4 book ai didi

python - 正则表达式搜索程序,如何在迭代文本时不重复答案? (Python3)

转载 作者:太空宇宙 更新时间:2023-11-03 14:18:12 26 4
gpt4 key购买 nike

我正在研究《使用 python 自动执行无聊的事情》一书中的“正则表达式搜索”项目。我尝试寻找答案,但未能在 python 中找到相关线程。

任务是:“编写一个程序,打开文件夹中的所有 .txt 文件,并搜索与用户提供的正则表达式匹配的任何行。结果应打印到屏幕上。”>

我在下面发送了我有问题的代码部分: 导入 glob、os、re

os.chdir(r'C:\Users\PythonScripts')

for file in glob.glob("*.txt"):
content = open(file)
text = content.read()
print(text)
for i in text:
whatToFind = re.compile(r'panda|by|NOUN')
finded = whatToFind.findall(text)
print(finded)

我想找到这3个词:panda|by|NOUN迭代文本后,我得到了多次重复答案的输出。我得到了两次答案“by”,但应该只有一次。例如对于文本:

'The ADJECTIVE panda walked to the NOUN and then VERB. A nearby NOUN was unaffected by these events.'

我得到:

['panda', 'NOUN', 'by', 'NOUN', 'by']

我应该只得到 4 个前字符串。我尝试修复它,但我不知道该怎么做。谁能告诉我我做错了什么?

最佳答案

这是因为您在正则表达式模式中缺少单词边界,并且“附近”单词中的 by 也被匹配:

In [3]: import re

In [4]: whatToFind = re.compile(r'panda|by|NOUN')

In [5]: s = 'The ADJECTIVE panda walked to the NOUN and then VERB. A nearby NOUN was unaffected by these events.'

In [6]: whatToFind.findall(s) # no word boundaries
Out[6]: ['panda', 'NOUN', 'by', 'NOUN', 'by']

In [7]: whatToFind = re.compile(r'\b(panda|by|NOUN)\b')

In [8]: whatToFind.findall(s) # word boundaries
Out[8]: ['panda', 'NOUN', 'NOUN', 'by']
<小时/>

请注意,可能有更好的方法来查找英语文本中的单词 - 使用自然语言处理工具包 ( nltk ) 及其 word_tokenize() 函数:

In [9]: from nltk import word_tokenize

In [10]: desired_words = {'panda', 'by', 'NOUN', 'cookie'}

In [11]: set(word_tokenize(s)) & desired_words # note: "cookie" was not found
Out[11]: {'NOUN', 'by', 'panda'}

关于python - 正则表达式搜索程序,如何在迭代文本时不重复答案? (Python3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48119587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com