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这个正则表达式返回我想要的内容,但很明显,它不会执行Python中所期望的操作。有人能帮我解决这个问题吗?正则表达式的目的基本上是提取item4和item5之间的内容。
谢谢

发布于 2012-07-12 08:06:41
您需要re.DOTALL标志,否则.不匹配换行符。要匹配EOL中的Item,您可以使用带有re.MULTILINE标志的$:
pattern = re.compile(r"(Item$\s*4.*)Item$\s*5", re.S | re.M)发布于 2012-07-12 07:27:13
尝试使用原始字符串
re.compile (r"(Item\\n*\s*4.*)Item\\n*\s*5")我猜这和你逃出\n有关。但是,如果不确切知道您期望匹配的是什么,就无法判断。
发布于 2012-07-12 08:48:38
知道换行符在哪里并不能帮助您定位匹配项,因此不需要专门匹配\n;它只是另一个空格字符。试试这个:
r"(?s)Item\s+4\..*?(?=Item\s+5\.)"(?s)使.能够匹配换行符,因此.*?将使用所有内容,直到lookahead - (?=Item\s*\d+\.) -发现下一个"Item“条目的开头。如果您想遍历所有项,可以用\d+替换4和5。
https://stackoverflow.com/questions/11443000
复制相似问题