Python 正则表达式匹配搜索字符串的意外部分

标签 python regex

我正在尝试使用正则表达式(Python 2.7;IPython QTConsole)解析页面。该页面是我使用 urllib2

从 Web 目录中提取的 .txt 文件
>>> 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中分割字符串,使用str.split()可能更容易或re.split() .

例如:

"1\n.2\n.3".split("\n.")

关于Python 正则表达式匹配搜索字符串的意外部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25823119/

相关文章:

python - 如何将经过训练的模型传递给 KerasClassifier?

python - matplotlib 中的 "Segmentation Fault"运行示例 Librosa 脚本

python - 正则表达式点不起作用

正则表达式匹配 URL

php - 如何为阿拉伯字符定义 libpcre 正则表达式?

python - 使用 python 删除循环中的冗余

python - 您是否应该在Python的非库代码中使用下划线_作为“访问修饰符指示符”?

JavaScript 正则表达式捕获倒数第二个反斜杠后的所有内容

python - 如何使用 Regex Python 从序列中查找逻辑 'or' 运算符 (||)

python - 如何删除具有某些第一级和第二级索引的多行?