gpt4 book ai didi

regex - 将正则表达式转换为 erlang 的 re 语法?

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

我很难尝试将以下正则表达式转换为 erlang 语法。

我有这样的测试字符串:

1,2 ==> 3 #SUP: 1 #CONF: 1.0

我用 regex101 创建的正则表达式是这样的(见下文):

([\d,]+).*==>\s*(\d+)\s*#SUP:\s*(\d)\s*#CONF:\s*(\d+.\d+)

Regex :

但是如果我将它转换为 erlang,我会得到奇怪的匹配结果 - 这是我的尝试:

{ok, M} = re:compile("([\\d,]+).*==>\\s*(\\d+)\\s*#SUP:\\s*(\\d)\\s*#CONF:\\s*(\\d+.\\d+)").
re:run("1,2 ==> 3 #SUP: 1 #CONF: 1.0", M).

此外,我得到了超过四场比赛。我做错了什么?

这是 regex101 版本: https://regex101.com/r/xJ9fP2/1

最佳答案

我对erlang了解不多,但我会尽力解释。用你的正则表达式

>{ok, M} = re:compile("([\\d,]+).*==>\\s*(\\d+)\\s*#SUP:\\s*(\\d)\\s*#CONF:\\s*(\\d+.\\d+)").
>re:run("1,2 ==> 3 #SUP: 1 #CONF: 1.0", M).
{match,[{0, 28},{0,3},{8,1},{16,1},{25,3}]}
^^ ^^
|| ||
|| Total number of matched characters from starting index
Starting index of match

多于四组的原因

第一个匹配always表示被complete正则表达式匹配的整个字符串,这里剩下的是你想要的四个捕获组。所以共有 5 个组。

([\\d,]+).*==>\\s*(\\d+)\\s*#SUP:\\s*(\\d)\\s*#CONF:\\s*(\\d+.\\d+)
<-------> <----> <---> <--------->
First group Second group Third group Fourth group
<----------------------------------------------------------------->
This regex matches entire string and is first match you are getting
(Zero'th group)

如何找到想要的答案

这里我们想要除第一组之外的任何内容(这是正则表达式的完整匹配)。所以我们可以使用all_but_first来避免第一组

> re:run("1,2 ==> 3 #SUP: 1 #CONF: 1.0", M, [{capture, all_but_first, list}]).                
{match,["1,2","3","1","1.0"]}

可以找到更多信息 here

关于regex - 将正则表达式转换为 erlang 的 re 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450854/

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