【问题标题】:MicroPython Regex not matching although it does onlineMicroPython Regex 不匹配,虽然它在线
【发布时间】:2018-01-13 22:21:36
【问题描述】:

我有一个奇怪的问题。当我在线解析我的正则表达式时,它工作正常,但在 MicroPython 中不匹配。

正则表达式: ()*<div>(.*?)<\/div>()*or<div>(.*?)<\/div>or<div>(.*?)</div>

匹配:

&lt;Storage {}&gt;86400<div>Uhrzeit in Sekunden: 65567</div><div>Timer: 20833</div>

这些都与 python 不匹配,但在线执行(http://regexr.com/https://pythex.org/

这只是我想要得到的一小部分。但我想要的是div里面的数据。

编辑: 我在 esp8266 上使用 micropython。我受到限制,无法使用 html 解析器。

【问题讨论】:

  • 各位,停止使用正则表达式解析 HTML! HTML 解析器的存在是有原因的。另外,为什么要使用空捕获组?您需要在 Python 中使用 findall,而不是 match
  • 对不起,我不准确。我只是想写得不那么详细。我在 esp8266 上使用 micropython。我在那里受限。
  • MicroPython Regex 是 Python Regex 的一个子集。并且 MicroPython 正则表达式中还有许多(2020 年 4 月)未修复的错误。特别是与转义字符有关。 ure library docsopen Issues in MicroPython Repo 是您对当前工作方式和方式的最佳选择。 :-/

标签: regex micropython no-match


【解决方案1】:

我怀疑您的问题是您没有将原始字符串传递给re.compile()。如果我这样做,我会得到我认为你想要的:

>>> rx = re.compile(r"<div>(.*?)<\/div>")
>>> rx.findall("&lt;Storage {}&gt;86400<div>Uhrzeit in Sekunden: 65567</div><div>Timer: 20833</div>")
>>> ['Uhrzeit in Sekunden: 65567', 'Timer: 20833']

您需要一个原始字符串,因为\ 既是 Python 字符串转义字符又是正则表达式转义字符。如果没有它,当您的意思是 \ 时,您必须将 \\ 放入您的正则表达式中,这很快就会变得混乱。

【讨论】:

  • MicroPython 正则表达式中没有 .findall。我会删除这个答案,因为它不适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2013-01-14
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多