加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – r分隔符不在括号中

发布时间:2020-12-14 06:06:43 所属栏目:百科 来源:网络整理
导读:我目前正在尝试在管道分隔符上拆分一个字符串: 999|150|222|(123|145)|456|12,260|(10|10000) 问题是我不想拆分|在括号内,我只想在括号外面分割这个字符. 这只是在每个|分裂字符,产生我不想要的结果: x - '999|150|222|(123|145)|456|12,260|(10|10000)'m
我目前正在尝试在管道分隔符上拆分一个字符串:

999|150|222|(123|145)|456|12,260|(10|10000)

问题是我不想拆分|在括号内,我只想在括号外面分割这个字符.

这只是在每个|分裂字符,产生我不想要的结果:

x <- '999|150|222|(123|145)|456|12,260|(10|10000)'
m <- strsplit(x,'|')

[[1]]
[1] "999" ? ?"150" ? ?"222" ? ?"(123" ? "145)" ? "456" ? ?"12,260" "(10" ??
[9] "10000)"

我希望得到以下结果,保持括号内的所有内容:

[[1]]
[1] "999" ? ? ? ?"150" ? ? ? ?"222" ? ? ? ?"(123|145)" ?"456" ? ? ??
[6] "12,260" ? ? "(10|10000)"

任何帮助赞赏.

解决方法

您可以使用perl = T和一些黑暗魔法来打开 PCRE

x <- '999|150|222|(123|145)|456|12,260|(10|10000)'
strsplit(x,'([^)]*)(*SKIP)(*F)||',perl=T)

# [[1]]
# [1] "999"        "150"        "222"        "(123|145)"  "456"       
# [6] "12,260"     "(10|10000)"

我们的想法是跳过括号中的内容. Live demo

在alternation operator的左侧,我们匹配括号中的任何内容,使子模式失败并强制正则表达式引擎不使用回溯控制重试子字符串.交替运算符的右侧匹配| (在括号之外,我们想要的……)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读