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]之间的一段。其他不要 展开
--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]之间的一段。其他不要 展开
3个回答
展开全部
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])
更多追问追答
追问
如果不用正则表达式,有别的方法吗?
追答
上面的代码,就不是用正则表达式呀,自己解析就可以了。
展开全部
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"
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"
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询