1
import re
import urllib.request
file_txt = urllib.request.urlopen("ftp://ftp.sec.gov/edgar/data/1408597/0000930413-12-003922.txt")
pattern_item4= re.compile("(Item\\n*\s*4.*)Item\\n*\s*5")
print(re.search(pattern_item4,bytes.decode(f)))
#Returns None

这个正则表达式以 rubular 形式返回我想要的,但显然它没有达到 Python 的预期效果。有人能帮我解决这个问题吗?正则表达式的目的基本上是提取 item4 和 item5 之间的内容。

谢谢

在此处输入图像描述

4

3 回答 3

1

尝试使用原始字符串

re.compile (r"(Item\\n*\s*4.*)Item\\n*\s*5")

我猜这与你逃避\n. 但是,如果不确切知道您期望匹配的是什么,就不可能说出来。

于 2012-07-11T23:27:12.667 回答
1

您需要 re.DOTALL 标志,否则.与换行符不匹配。要在 EOL 匹配Item,您可以使用$re.MULTILINE 标志:

pattern = re.compile(r"(Item$\s*4.*)Item$\s*5", re.S | re.M)
于 2012-07-12T00:06:40.743 回答
0

知道换行符的位置并不能帮助您找到匹配项,因此无需\n专门匹配;它只是另一个空白字符。试试这个:

r"(?s)Item\s+4\..*?(?=Item\s+5\.)"

(?s)使.匹配换行符,因此.*?会消耗所有内容,直到前瞻 -(?=Item\s*\d+\.)发现下一个“项目”条目的开头。如果您想遍历所有项目,可以将4and5替换为\d+.

于 2012-07-12T00:48:37.590 回答