我正在使用Python docx库编写代码,以查找并突出显示文本中的所有引号。除非引号中有问号(例如:它可以找到“你好吗?但在“Hello?”上返回NoneType对象。你好吗?“并在下面的location.span()
上抛出AttributionError)。
我试着摆弄正则表达式,包括“([\w?]*?)”和\?尝试了几次,但似乎都不起作用--下面的正则表达式通过了正则表达式检查器,并显示“Hello?你好吗?“例如,但我的程序不会
document = Document(filepath)
def highlight_quotes(document):
for paragraph in document.paragraphs:
if matches := re.findall(r'“(.*?)”', paragraph.text):
quotes = []
for i in range(len(matches)):
location = re.search(matches[i], paragraph.text)
start_index, end_index = location.span()
quotes.append((start_index, end_index))
1条答案
按热度按时间kadbb4591#
问题是,当您执行
re.search(matches[i], paragraph.text)
时,您试图将文本的一部分用作正则表达式。但它不是正则表达式,如果它包含在正则表达式中有特殊含义的字符(例如?
)将无法正确匹配,甚至可能引发异常。您可以使用
re.escape()
来转义所有特殊字符,但这仍然是不正确的。如果有任何重复的匹配,它将只返回第一个匹配的位置。如果您想获得匹配项的位置,请使用
re.finditer()
--它返回match
对象,而不是返回文本,您可以从中获得每个匹配项的跨度。