python检索文件里单词的中文_使用Python在一个.txt文件中搜索单词或短语列表(并显示上下文)...

尽管Python社区中的许多人经常对正则表达式表示反感,对于适当的用例来说,它们确实是一个宝贵的工具——其中肯定包括识别单词和短语(感谢正则表达式模式中的\b“单词边界”元素——基于字符串处理的替代方案更是一个问题,例如。,.split()使用空格作为分隔符,因此令人恼火的是,将标点符号附加到与其相邻的单词上,等等)。

如果RE是好的,我会推荐如下:import re

import sys

def main():

if len(sys.argv) != 3:

print("Usage: %s fileofstufftofind filetofinditin" % sys.argv[0])

sys.exit(1)

with open(sys.argv[1]) as f:

patterns = [r'\b%s\b' % re.escape(s.strip()) for s in f]

there = re.compile('|'.join(patterns))

with open(sys.argv[2]) as f:

for i, s in enumerate(f):

if there.search(s):

print("Line %s: %r" % (i, s))

main()

第一个参数是要查找单词或短语的文本文件的路径,每行一个,第二个参数是要查找单词或短语的文本文件的路径。如果需要的话,很容易使大小写搜索不敏感(可能只是基于命令行选项开关的选择性),等等

对不熟悉REs.的读者的一些解释:

patterns项中的\b项确保不会出现意外匹配(如果您正在搜索“cat”或“dog”,则不会看到“catalog”或“underdog”的意外命中;并且不会错过“The cat,smileing,run away”中的命中,因为某些人认为存在“cat”这个词,包括逗号;-)。

|项表示or,例如,来自包含内容(两行)的文本文件cat

dog

这将形成模式'\bcat\b|\bdog\b',它将定位“猫”或“狗”(作为独立单词,忽略标点符号,但拒绝较长单词中的点击)。

re.escape转义标点符号,因此它是按字面匹配的,而不是像通常在RE模式中那样具有特殊意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值