我是Python(和编程人员)菜鸟,而且我正尝试使用Python 3提取Markdown斜体文本,例如

*R v Stephenson*


从一个单独的文件中的多行文本块中提取,然后将其转储到一个集中。我的代码如下:

import re
filename = input("Name of file: ")
readfile = open(filename, "r+").read()
cases = re.findall(r"\*.*\b\s\bv\b\s\b.*\*",readfile)
print("All cases:", cases)


它工作正常,除非同一行中有多个斜体,例如:

*R v Stephenson* was a case, but so was *R v Stephens*, and the two should not be confused.


在这些情况下,它将第一个星号和最后一个星号之间的整个部分添加到集合中。如何说服Python分别对待正则表达式的每个实例?更重要的是,有人知道为什么会这样吗?

谢谢!

最佳答案

这里的问题是,正则表达式中的*(以及+?)默认情况下是贪婪的,这意味着它们将匹配尽可能多的字符。您可以使用?将正则表达式设为非贪婪:

cases = re.findall(r"\*.*?\b\s\bv\b\s\b.*?\*",readfile)


DEMO

Detailed Explanation

10-06 05:21
查看更多