如何使用正则表达式从带有 Python 的 word 文档中提取问题

Vla*_*kon 3 python regex ms-word python-3.7

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

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

我的经济援助会支付住房费用吗?
校外住宿 - 在对您的学杂费申请经济援助后
,任何剩余资金将作为退款退还给您,该退款将
直接存入(可以通过您的
帐户设置)或以纸质支票的形式邮寄给您。然后,您可以使用
退款来支付租金。重要的是要注意,
在租金到期时可能无法提供经济援助,因此请务必制定
支付租金的计划。我的经济援助会支付住房费用吗?
“金融”“帮助”“房子”
资金“大学橡树”
“钱”“知所”
“支付”“章”
“补助金”“桂冠”

我如何支付我的住房费用?
我如何支付住房费用?

如果还有一种更简单的方法可以将 word doc 导出到不同类型的文件中,那么知道反馈意见会很棒。谢谢

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

".*[?=?]$"
"^(W|w).*[?=?]$"
"^[A-Za-z].*[?=?]$"
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)

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

vs9*_*s97 6

你的错误:

result = re.search('.*[?=?]$', wordDoc)
Run Code Online (Sandbox Code Playgroud)

我相信这条线是问题的原因。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())
Run Code Online (Sandbox Code Playgroud)

您的正则表达式:

不幸的是,您的正则表达式并不完全正确,因为尽管从逻辑上讲只匹配以 a 结尾的句子是有意义的,但例如?,您的匹配项之一是place to pay your rent. Will my financial aid pay for housing?。只有那句话的第二部分是一个实际的问题。所以丢弃所有小写字母。你的正则表达式应该是这样的:

[A-Z].*\?$
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明