在python中解析文本时遇到的问题

在python中解析文本时遇到的问题,python,parsing,Python,Parsing,我编写了一个简短的Python脚本,它解析一个文本文件,以便提取所有长度在4到8个字母之间的单词,然后将它们写入另一个文本文件。每个单词都应该加引号,后跟逗号。为了测试脚本,我从lorem ipsum生成器中抓取了一段文本。但是,输出与脚本的规格不一致。我将在下面的脚本输出下解释这些差异 代码如下: import re with open('loremipsum.txt') as file: lines = file.read() blacklist = [" ", ",", ".

我编写了一个简短的Python脚本,它解析一个文本文件,以便提取所有长度在4到8个字母之间的单词,然后将它们写入另一个文本文件。每个单词都应该加引号,后跟逗号。为了测试脚本,我从lorem ipsum生成器中抓取了一段文本。但是,输出与脚本的规格不一致。我将在下面的脚本输出下解释这些差异

代码如下:

import re


with open('loremipsum.txt') as file:
    lines = file.read()

blacklist = [" ", ",", "."]

step_1 = re.split('. | , | ', lines)

with open('ipsumWords.txt', 'w') as f:
    for word in step_1:
        if not word in blacklist:
            if (len(word) > 3 and len(word) < 9):
                f.write("'")
                f.write(word)
                f.write("'")
                f.write(",")
重新导入
以open('loremipsum.txt')作为文件:
lines=file.read()
黑名单=[“”,“,”,“,”]
步骤1=重新拆分(“.|,|”,行)
以open('ipsumWords.txt','w')作为f:
对于步骤_1中的word:
如果不是黑名单中的单词:
如果(单词)长度大于3且单词长度小于9):
f、 写(“”)
f、 写(字)
f、 写(“”)
f、 写(“,”)
以下是输入文件的简短示例:

葫芦和西瓜。后捣碎小牛,干草或鸭子,工具棚马。在茄子上,库斯特是粮仓、粮车库斯特杆棚、栅栏门、西葫芦、胡萝卜、废金属。孔雀咩叫鸵鸟,猫头鹰。芸豆鸵鸟卡车。葫芦在焊接设备上发出咕噜咕噜的声音。苹果鸭子稻草鹌鹑鸵鸟驴子干草钩黄瓜。芸豆鸵鸟卡车。联合收割机打捆机,打捆机如海藤、欧芹、哈密瓜

这是输出的样子:

“葫芦”、“瓜”是,“葫芦”、“磅”是,”。“。“。“葫芦”、“磅”是,”,”。“。“。“。“葫芦”、“瓜”是,“瓜”是,”。“。“。“。“。“瓜”是”、“卡车”、“卡车”、“卡车”是,”他们,”是,“棚”、“栅栏”、“大门”、“栅栏”、“大门”、“大门”、“南瓜”、“中国中国,”,”,”,”小牛”、“小牛”、“小牛”、“金属”、“金属”、“金属”、“孔雀”、“孔雀”、“鸵鸟”、“鸵鸟”、“绑架”、“鸡”、“绑架”、“豆”、“豆”、“黄豆”、“豆”、“鸵鸟”、“豆”、“鸵鸟”、“豆”、“鸵鸟”、“卡车”、“卡车”、“卡车”、“卡车”、“卡车”、“,”,”,”,”豆”、“鸵鸟”、“卡车”、“。“。“。“。“。“。“。“这些,”,”,”,”,”若若若若若若若,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”。“。“。“。“。“。“。“豆”、“卡车”、“卡车”、“卡车”、“卡车”、“卡车”、“卡车”、“卡车”、“。“。“。“。“。“。“若,”,”,”,”,”,”,”,”,”,”","combi",,“收获”、“斯沃瑟”、“贝尔”、“干草堆”、“欧芹”、“甜瓜”

输出有几个问题。我将为每一类问题举一个例子。 1.有些单词如“庞德”的最后一个字母被截断,变成了“庞德”
2.ostriches is一词不仅s被截断,如果拼写正确,它将有9个字母长

您的主要问题是这一行中的正则表达式:

step_1 = re.split('. | , | ', lines)
请记住,正则表达式中的
表示“任意字符”,因此表达式
表示“后跟空格的任意字符”。这就是为什么有些单词看起来被截断的原因:例如,以
鸵鸟
为例,末尾的
s
表达式匹配,因此字符串在拆分左侧的
鸵鸟
处被拆分

还要记住,空格是有意义的,因此表达式
只会将逗号与两边的空格匹配,这可能不是您的意思

如果要在句点、逗号和空格上拆分,则需要以下内容:

step_1 = re.split('[.,]? ')
这将在空白处拆分单词,可以选择前面加

这导致
步骤_1
具有以下值:

>>> step_1
['Gourds', 'watermelon', 'Post', 'pounder', 'calf', 'hay', 'or',
'duck', 'is', 'tool', 'shed', 'horse', 'In', 'eggplant', 'quonset',
'is', 'grain', 'bins', 'grain', 'trucks', 'quonset', 'pole', 'shed',
'with', 'fences', 'gates', 'zucchini', 'carrots', 'scrap', 'metal',
'Peacocks', 'baa', 'ostriches', 'owls', 'Kidney', 'beans', 'ostrich',
'trucks', 'Gourds', 'utters', 'at', 'welding', 'equipment', 'a',
'oink', 'oink', 'haybine', 'Apples', 'ducks', 'straw', 'quail', 'a',
'ostriches', 'donkey', 'hay', 'hook', 'cucumbers', 'Kidney', 'beans',
'ostrich', 'trucks', 'Combine', 'Harvester', 'swather', 'baler', 'as',
'haybine', 'parsley', 'melon', 'in', 'ha.\n']

这将使您更接近您想要的内容。

您必须使用正则表达式吗?我想我不必这样做,但这似乎是一种在多个分隔符上拆分一行文本的好方法。如果有更好的方法,我洗耳恭听。我建议在设置步骤_1后立即打印出其内容,以确保重新拆分符合您的预期。这是一个很好的建议!非常感谢。成功了!我没有意识到这件事的重要性。那是值得注意的!!谢谢你!!