【发布时间】:2012-07-11 23:24:28
【问题描述】:
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 之间的内容。
谢谢
【问题讨论】:
-
\\n*没有效果。它必须是:[\n]*(或[\\n]*,取决于您传递此字符串)。 -
谢谢,杰克。这个技巧也不管用。我尝试了你的建议,但没有运气..
-
您检查过我的回答并检查过
file_txt中确实有数据吗?还有f是从哪里来的bytes.decode(f)? -
@zsljulius:如果您发布您想要提取的确切部分,也许我们可以详细说明一个正则表达式。
-
嘿乔恩,所以文件是从 sec 的 ftp 服务器传输的。它是txt格式的。但是,该文件更像是一个 xml 文件。 urllib.request.urlopen 给了我一个类似对象的文件,如果我只做 file_txt.read(),我不能直接应用 re.search。这就是为什么我使用 bytes.decode(f) 将其变成类似对象的字符串的原因。我也尝试过 str(f),但是 str(f) 会以某种方式截断我需要的任何内容。所以我最后求助于 bytes.decode(f) 来获取原始字符串
标签: python regex python-3.x