2014-09-13 50 views
2

我想使用正则表达式(Python 2.7; IPython QTConsole)解析页面。该网页是从Web目录拉到一个.txt,我使用urllib2Python正则表达式在搜索字符串的意外部分匹配

>>> import re 
>>> Z = '[A-Z]{2}Z[0-9]{3}.*?\\$\\$' 
>>> snippet = re.search(Z, page, re.DOTALL) 
>>> snippet = snippet.group() # Only including the first part for brevity. 
'PZZ570-122200-\nPOINT ARENA TO POINT REYES 10 TO 60 NM OFFSHORE-\n249 AM PDT FRI SEP 12 2014\n.TODAY...SW WINDS 5 KT. WIND WAVES 2 FT OR LESS.\nNW SWELL 3 TO 5 FT AT 12 SECONDS. PATCHY FOG IN THE MORNING.\n.TONIGHT...W WINDS 10 KT. WIND WAVES 2 FT OR LESS.' 

我要搜索换行符后跟一个时期抓起。我想要得到如下的第一个和第二个事件。目标是解析第一个和第二个(及后续)\n\.分隔符之间的信息。我知道我可以进行环视,但是我很难将前瞻性视为贪婪。此外,我不明白为什么以下不起作用。

>>> pat = r"\n\." 
>>> s = re.search(pat, snippet.group(), re.DOTALL) 
>>> e = re.search(pat, snippet.group()[s.end():], re.DOTALL) 

以上s的作品,但我得到了e一个奇怪的结果。

>>> [s.group(), s.start(), e.group(), e.end()] 
['\n.', 90, '\n.', 110] 

>>> snippet.group()[s.start():e.end()] 
'\n.TODAY...SW WINDS 5' 

>>> snippet.group()[e.start():e.end()] 
' 5' 

我想有一个在snippet.group()一些格式化方法,是隐藏?如果是这样的话,那么奇怪的是一些换行符是明确的,就好像snippet.group()是原始的,而其他的则是隐藏的。为什么e.group()snippet.group()[e.start():e.end()]有所不同?

如果这个问题已经解决,我很抱歉。我找不到任何相关的东西。

非常感谢。

+0

你可能有更多的运气're.split()'你的既定目标 – Aprillion 2014-09-13 12:25:27

+0

这工作就像一个魅力。非常感谢。我仍然对上面的行为感到好奇。 – rlantz 2014-09-13 12:33:26

+0

不知道,将不得不花费大量的时间调试:( – Aprillion 2014-09-13 12:40:57

回答