gpt4 book ai didi

regex - 如何在 Nim 中捕获正则表达式的一部分

转载 作者:行者123 更新时间:2023-12-05 01:10:29 25 4
gpt4 key购买 nike

我想从“some text :some_token”文本中提取“some_token”。

下面的代码返回完整匹配 ' :some_token' 而不是用 ([a-z0-9_-]+ 标记的捕获部分 'some_token' )

import re

let expr = re("\\s:([a-z0-9_-]+)$", flags = {re_study, re_ignore_case})
for match in "some text :some_token".find_bounds(expr):
echo "'" & match & "'"

如何修改它以仅返回捕获的部分?

附言

此外,renre 模块有什么区别?

最佳答案

提交的代码不编译(find_bounds 返回一个 tuple[first, last: int] 而不是你可以用 for 迭代的东西>).尽管如此,该示例中的 find_bounds 确实会给出整个模式的索引范围,而不是捕获子字符串。

以下 ( https://play.nim-lang.org/#ix=2yvs ) 用于提供捕获的字符串:

import re

let expr = re("\\s:([a-z0-9_-]+)$", flags = {re_study, re_ignore_case})
var matches: array[1, string]
if "some text :some_token".find(expr, matches) >= 0:
echo matches # -> ["some_token"]

请注意,在上面的 matches 中,捕获的组必须具有正确的长度(除非您指定正确的长度,否则使用序列将不起作用)。这是 re 的一个已知问题:https://github.com/nim-lang/Nim/issues/9472

关于renre的双重存在,总结自this discussion :

  • nre 具有与 re(更接近 C API)不同的 api(更符合人体工程学)
  • nre 过去的问题比 re 少,但最近差距已经缩小(另见 open regex issues )
  • 可能将来 nre 可能会从 stdlib 中移出并放入一个 nimble 包中,但是由于这在 v1 中没有发生,所以它可能不会在 v2 之前发生
  • 请注意,有一个正则表达式 (nim-regex) 的纯 nim 实现,它也有一个符合人体工程学的 API。

关于regex - 如何在 Nim 中捕获正则表达式的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64027629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com