gpt4 book ai didi

在 R 拆分问题中使用 rebus 的正则表达式?

转载 作者:行者123 更新时间:2023-12-02 09:10:48 25 4
gpt4 key购买 nike

我有以下字符串模式:

Name_session_id:Owner:UUID 但有时它可以只是 Name:Owner:UUID。

例如:

John_1:David:enfl43erl34r345

John:David:enfl43erl34r345

我想使用 stringrrebus 来构建一个如下所示的数据框:

Name   Session   Owner   UUID
John 1 David enfl43erl34r345
John NA David enfl43erl34r345

请告知如何做到这一点,这是我到目前为止对模式所做的:

capture(one_or_more(WRD)) %R% 
optional("_") %R%
capture(optional(DGT)) %R%
":" %R%
capture(one_or_more(WRD)) %R%
":" %R%
capture(one_or_more(WRD))

最佳答案

问题出在第一个 one_or_more(WRD) 上,它也匹配 _,下面的 _\d? 甚至都没有尝试过,因为 \w+ 捕获了整 block 字母、数字和下划线。

将第一个 one_or_more(WRD) 替换为 one_or_more(ALNUM) 以仅将 1+ 个字母或数字捕获到组 1 中:

capture(one_or_more(ALNUM)) %R% 
optional("_") %R%
capture(optional(DGT)) %R%
":" %R%
capture(one_or_more(WRD)) %R%
":" %R%
capture(one_or_more(WRD))

或者,使用 lazy(one_or_more(WRD)) 使其变得懒惰:

capture(lazy(one_or_more(WRD))) %R% 
optional("_") %R%
capture(optional(DGT)) %R%
":" %R%
capture(one_or_more(WRD)) %R%
":" %R%
capture(one_or_more(WRD))

不过,我相信你应该使用

capture(one_or_more(ALNUM)) %R% 
optional(
group("_" %R%
capture(one_or_more(DGT)))) %R%
":" %R%
capture(one_or_more(WRD)) %R%
":" %R%
capture(one_or_more(WRD))

它将创建一个正则表达式,如 ([[:alnum:]]+)(?:_([\d]+))?:([\w]+):([\w]+) .也就是说,不是将 _ 用作可选字符后跟可选 one_or_more(DGT),而是可以将这两个后续模式用可选组包装起来,同时使模式成为强制性模式里面。

关于在 R 拆分问题中使用 rebus 的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493088/

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