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之间提取东西。
谢谢
答案 0 :(得分:1)
尝试使用原始字符串
re.compile (r"(Item\\n*\s*4.*)Item\\n*\s*5")
我猜这与你逃离\n
有关。但是如果不确切地知道你期望匹配的是什么,就不可能分辨出来。
答案 1 :(得分:1)
你需要re.DOTALL标志,否则.
与换行符不匹配。要在EOL上匹配Item
,您可以将$
与re.MULTILINE标志一起使用:
pattern = re.compile(r"(Item$\s*4.*)Item$\s*5", re.S | re.M)
答案 2 :(得分:0)
知道换行符的位置无法帮助您找到匹配项,因此无需专门匹配\n
;它只是另一个空白角色。试试这个:
r"(?s)Item\s+4\..*?(?=Item\s+5\.)"
(?s)
使.
能够匹配换行符,因此.*?
会消耗所有内容,直到前瞻 - (?=Item\s*\d+\.)
- 找到下一个“项目”条目的开头。如果您想迭代所有项目,可以将4
和5
替换为\d+
。