如何解决错误:未声明的字段:类型为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(有效)示例代码几乎相同。
解决方法
导入整个模块在Nim中是惯用的,由于强大的类型系统,很少导致歧义。有关Nim不分享Python导入问题的原因,请参见https://narimiran.github.io/2019/07/01/nim-import.html。
但是,即使不是惯用的Nim,这也是您要执行的操作:
您不仅使用re
和findIter
,还使用了过程captures
和[]
proc,因此导入行需要为:
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))
,
似乎是进口货。它适用于import nre
而不是from nre import findIter,re
。但为什么?我想保持我的命名空间整洁!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。