我有一个巨大的文件,其中包含以下数据列表:
#fabulous 7.526 2301 2
#excellent 7.247 2612 3
#superb 7.199 1660 2
#perfection 7.099 3004 4
#terrific 6.922 629 1
我有一个包含这样句子列表的文件:
Terrific Theo Walcott is still shit, watch Rafa and Johnny deal with him on Saturday.
its not that I'm a GSP fan, fabulous
Iranian general says Israel's Iron Dome can't deal with their missiles
with J Davlar 11th. Main rivals are team Poland.
我想用正则表达式检查以下内容:
如果每个句子中的第一个单词与文件中的任何单词匹配 例如,如果太棒了,它的伊朗人,是否存在于文件中
如果句子中的最后一个单词与文件中的任何单词匹配 例如,如果星期六,神话般的,导弹,波兰出现在文件中
如果句子中单个单词的2或3个字符前缀和后缀与文件中的2个或3个字符前缀和后缀相匹配 例如,Ter,it,Ira,wi是否匹配文件中的任何2或3个单词前缀。同样适用于后缀。
我是正则表达式的新手,我可以这么想,但没有得到结果: term2.lower()是文件中的第一列
wordanalysis["trail"] = found if re.match(sentence[-1],term2.lower()) else not(found)
wordanalysis["lead"] = found if re.match(sentence[0],term2.lower()) else not(found)
答案 0 :(得分:3)
更新:根据@justhalf提出的很棒的建议,无需使用正则表达式来分割单词。如果您想要区分大小写的匹配,请删除.lower()
。
这将匹配数据列表中的第一个单词和最后一个单词(不包括任何标点符号或尾随空格):
(^\s?\w+\b|(\b\w+)[\.?!\s]*$)
<强>匹配强>
MATCH 1-1. Terrific
MATCH 2-1. Saturday.
2. Saturday
MATCH 3-1. its
MATCH 4-1. fabulous
2. fabulous
MATCH 5-1. Iranian
MATCH 6-1. missiles
2. missiles
MATCH 7-1. with
MATCH 8-1. Poland.
2. Poland
<强>实施强>
import re, string
sentences = open("sentences.txt").read().splitlines()
data = open("data.txt").read()
pattern = re.compile(r"(^\s?\w+\b|(\b\w+)[\.?!\s]*$)")
for line in sentences:
words = line.strip().split()
first = words[0].lower()
last = words[-1].translate(None, string.punctuation).lower()
if (re.search(first, data, re.I)):
print "Found " + first + " in data.txt"
if (re.search(last, data, re.I)):
print "Found " + last + " in data.txt"
这可能不是最优雅的方式,但你明白了。
代码经过测试并正常工作,输出为:
Found Terrific in data.txt
Found fabulous in data.txt
这还没有达到你的第三个标准,测试一下,看看它到目前为止是否正常工作。