python正则表达式,提取出由beginning开始到第一个end结束的一段文字

bug.txt--beginning50-232323dsfalksldfkladdsljksdklfjlaklsdjlfkl90jklsdj-klajsdlkldafj... bug.txt
--beginning
50-23 2323 dsfal ksldfklad ds ljk sdklfjl
aklsdjlf kl 90 jklsdj- klajsdl kldafjkl
skdlfjksdl
......
[end]
sdkljfkls ksldfjlsd l jklsdjflasdf ljsdflsd
sdfsdf 8923749 89 89wejklj 9808 ljldf
sdlfj u789890 kjsdklf
...
[end]

只提取--beginning开始到第一个[end]之间的一段。其他不要
展开
 我来答
大少爷的刀把
2013-06-03 · 超过24用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:21.1万
展开全部

python中正则是无法做到跨行匹配的,你自己写函数解析,比如 :

xyz = """
bug.txt
--beginning
50-23 2323 dsfal ksldfklad ds ljk    sdklfjl 
aklsdjlf kl 90 jklsdj- klajsdl kldafjkl
skdlfjksdl
......
[end]
sdkljfkls ksldfjlsd l jklsdjflasdf  ljsdflsd
sdfsdf 8923749 89 89wejklj  9808 ljldf 
sdlfj u789890 kjsdklf 
...
[end]
"""

lines = xyz.splitlines()
start = -1
end = 0
for i, line in enumerate(lines):
    if start == -1 and line == "--beginning":
        start = i
    elif not start == -1 and line == "[end]":
        end = i
        break

if not end == 0:
    print "\n".join(lines[start+1:end])
更多追问追答
追问
如果不用正则表达式,有别的方法吗?
追答
上面的代码,就不是用正则表达式呀,自己解析就可以了。
albumin
2013-06-03 · TA获得超过1.2万个赞
知道大有可为答主
回答量:4889
采纳率:87%
帮助的人:2403万
展开全部
import re
s=open(r"bug.txt").read()
regexpr=re.compile(r"beginning(.*?)\[end\]",re.DOTALL)
result=regexpr.search(s)
try:
print result.group(1)
except:
print "Can't find match string"
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦里寻你我他
2013-06-04 · TA获得超过2199个赞
知道大有可为答主
回答量:2171
采纳率:42%
帮助的人:1215万
展开全部

--beginning(.*?)\[end\]

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式