首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式在Rubular中传递,但不在Python中传递

正则表达式在Rubular中传递,但不在Python中传递
EN

Stack Overflow用户
提问于 2012-07-12 07:24:28
回答 3查看 180关注 0票数 1
代码语言:javascript
复制
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之间的内容。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-12 08:06:41

您需要re.DOTALL标志,否则.不匹配换行符。要匹配EOL中的Item,您可以使用带有re.MULTILINE标志的$

代码语言:javascript
复制
pattern = re.compile(r"(Item$\s*4.*)Item$\s*5", re.S | re.M)
票数 1
EN

Stack Overflow用户

发布于 2012-07-12 07:27:13

尝试使用原始字符串

代码语言:javascript
复制
re.compile (r"(Item\\n*\s*4.*)Item\\n*\s*5")

我猜这和你逃出\n有关。但是,如果不确切知道您期望匹配的是什么,就无法判断。

票数 1
EN

Stack Overflow用户

发布于 2012-07-12 08:48:38

知道换行符在哪里并不能帮助您定位匹配项,因此不需要专门匹配\n;它只是另一个空格字符。试试这个:

代码语言:javascript
复制
r"(?s)Item\s+4\..*?(?=Item\s+5\.)"

(?s)使.能够匹配换行符,因此.*?将使用所有内容,直到lookahead - (?=Item\s*\d+\.) -发现下一个"Item“条目的开头。如果您想遍历所有项,可以用\d+替换45

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11443000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档