我正在尝试使用正则表达式(Python 2.7;IPython QTConsole)解析页面。该页面是我使用 urllib2
>>> 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()]
不同?
如果这个问题已经得到解决,我深表歉意。我找不到任何相关的东西。
提前非常感谢。
最佳答案
关于Python 正则表达式匹配搜索字符串的意外部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25823119/