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 文件
你的错误:
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)