繁体   English   中英

如何使用regex从Python的Word文档中提取问题

[英]How to extract questions from a word doc with Python using regex

我正在使用docx库从word doc中读取文件,我正在尝试使用正则表达式搜索和匹配仅提取问题。 我找到了实现它的无限方式,但我不断收到“ TypeError”。

我试图提取的数据是这样的:

我的经济援助会支付住房费用吗?
校外住宿-在经济援助适用于您的学费和
费用,剩余的资金将作为退款退还给您
要么直接存入(可以通过您的
帐户)或作为纸质支票邮寄给您。 然后,您可以使用
退还租金。 请务必注意,经济援助可能
到期时无法使用,因此请确保有一个计划
支付租金的地方。 我的经济援助会支付住房费用吗?
“财务”“帮助”“房屋”
资金“大学橡树”
“钱”“ chisho”
“支付”“章”
“授予”“月桂树”
收到房间和补助有什么要求?
我该如何支付房租?
我该如何支付住房费用?

如果还有一种将Word文档导出到其他类型的文件中的简便方法,那么很高兴获得反馈。 谢谢

我正在使用正则表达式101,我尝试了以下正则表达式来仅匹配以问号结尾的句子

".*[?=?]$"
"^(W|w).*[?=?]$"
"^[A-Za-z].*[?=?]$"
import re
import sys
from docx import Document

wordDoc = Document('botDoc.docx')

result = re.search('.*[?=?]$', wordDoc)
print(result)
if result:
    print(result.group(0))
for table in wordDoc.tables:
    for row in table.rows:
        for cell in row.cells:
            print("test")

我希望将匹配的模式保存到目录中,以便可以将数据导出到csv文件中

您的错误:

result = re.search('.*[?=?]$', wordDoc)

我相信这是问题的根源。 search()期望将字符串作为第二个参数,但是正在接收Document对象。

您应该做的是使用findall()函数。 search()仅找到模式的第一个匹配项; findall()查找所有匹配项,并将它们作为字符串列表返回,每个字符串代表一个匹配项。

由于使用的是docx,因此必须提取docx的内容,并将其用作findall()方法的第二个参数。 如果我没记错的话,可以先提取所有段落,然后提取各个段落的文本来完成。 请参阅问题。

仅供参考,对简单文本文件的处理方式如下:

# Open file
f = open('test.txt', 'r')
# Feed the file text into findall(); it returns a list of all the found strings
strings = re.findall(r'your pattern', f.read())

您的正则表达式:

不幸的是,您的正则表达式不是很正确,因为虽然从逻辑上讲,仅匹配以?结尾的句子才有意义? ,其中一场比赛是您place to pay your rent. Will my financial aid pay for housing? place to pay your rent. Will my financial aid pay for housing? , 例如。 该句子的仅第二部分是一个实际的问题。 因此,请丢弃所有小写字母。 您的正则表达式应类似于:

[A-Z].*\?$

在此处输入图片说明

暂无
暂无

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

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