Error: undeclared field: 'captures' for type nre.RegexMatch
Error: undeclared field: 'captures' for type nre.RegexMatch
我正在尝试将给定的字符串与 nre
:
匹配
from nre import findIter, re
const sourceString = """
39
00:04:01,116 --> 00:04:01,783
Attrape.
"""
let srtRex = re"\d+\R\d+:\d+:\d+,\d+ --> \d+:\d+:\d+,\d+\R(\w+)"
for m in findIter(sourceString, srtRex, 0):
echo(m.captures[0])
虽然编译失败,但失败并显示 Error: undeclared field: 'captures' for type nre.RegexMatch [declared in /usr/local/Cellar/nim/1.2.6/nim/lib/impure/nre.nim(149, 3)]
。
这很奇怪,因为如果我这样做 echo(m)
,我会得到原始字符串,所以匹配本身工作正常。只有这个字段我无法访问。这很奇怪,因为 in this issue(有效的)示例代码几乎相同。
好像是进口的。它适用于 import nre
而不是 from nre import findIter, re
。但为什么?我想保持我的命名空间干净!
导入整个模块在 Nim 中是惯用的,并且由于强大的类型系统而很少导致歧义。请参阅 https://narimiran.github.io/2019/07/01/nim-import.html 了解 Nim 为何不分享 Python 的导入问题的详细说明。
然而,这里是如何做你想做的,即使它不是惯用的 Nim:
您使用的不仅仅是 re
和 findIter
,您还使用了过程 captures
和 []
过程,因此您的导入行需要是:
from nre import findIter, re, captures, `[]`
或者,为了完全分离命名空间,但非常难看,您可以:
from nre import nil
let srtRex = nre.re"\d+\R\d+:\d+:\d+,\d+ --> \d+:\d+:\d+,\d+\R(\w+)"
for m in nre.findIter(sourceString, srtRex, 0):
echo(nre.`[]`(nre.captures(m),0))
我正在尝试将给定的字符串与 nre
:
from nre import findIter, re
const sourceString = """
39
00:04:01,116 --> 00:04:01,783
Attrape.
"""
let srtRex = re"\d+\R\d+:\d+:\d+,\d+ --> \d+:\d+:\d+,\d+\R(\w+)"
for m in findIter(sourceString, srtRex, 0):
echo(m.captures[0])
虽然编译失败,但失败并显示 Error: undeclared field: 'captures' for type nre.RegexMatch [declared in /usr/local/Cellar/nim/1.2.6/nim/lib/impure/nre.nim(149, 3)]
。
这很奇怪,因为如果我这样做 echo(m)
,我会得到原始字符串,所以匹配本身工作正常。只有这个字段我无法访问。这很奇怪,因为 in this issue(有效的)示例代码几乎相同。
好像是进口的。它适用于 import nre
而不是 from nre import findIter, re
。但为什么?我想保持我的命名空间干净!
导入整个模块在 Nim 中是惯用的,并且由于强大的类型系统而很少导致歧义。请参阅 https://narimiran.github.io/2019/07/01/nim-import.html 了解 Nim 为何不分享 Python 的导入问题的详细说明。
然而,这里是如何做你想做的,即使它不是惯用的 Nim:
您使用的不仅仅是 re
和 findIter
,您还使用了过程 captures
和 []
过程,因此您的导入行需要是:
from nre import findIter, re, captures, `[]`
或者,为了完全分离命名空间,但非常难看,您可以:
from nre import nil
let srtRex = nre.re"\d+\R\d+:\d+:\d+,\d+ --> \d+:\d+:\d+,\d+\R(\w+)"
for m in nre.findIter(sourceString, srtRex, 0):
echo(nre.`[]`(nre.captures(m),0))