【发布时间】:2021-11-16 09:24:08
【问题描述】:
我有以下字符串:
Almonds ; Roasted Peanuts (Peanuts; Canola Oil (Antioxidants (319; 320)); Salt); Cashews
我想将不在括号中的分号替换为逗号。括号内可以有任意数量的括号和任意数量的分号,结果应如下所示:
Almonds , Roasted Peanuts (Peanuts; Canola Oil (Antioxidants (319; 320)); Salt), Cashews
这是我当前的代码:
x<- Almonds ; Roasted Peanuts (Peanuts; Canola Oil (Antioxidants (319; 320)); Salt); Cashews
gsub(";(?![^(]*\\))",",",x,perl=TRUE)
[1] "Almonds , Roasted Peanuts (Peanuts, Canola Oil (Antioxidants (319; 320)); Salt), Cashews "
我面临的问题是如果在更大的括号内有一个嵌套的 (),我拥有的正则表达式会将分号替换为逗号。
我能否获得一些关于正则表达式的帮助以解决问题?提前谢谢你。
【问题讨论】:
-
但是,
Almonds和Roasted之间的逗号是在括号之间。 -
这很好,因为我的最终目标是用逗号分割字符串。如果它使事情变得更容易,我也可以排除大括号,即
Almonds ; Roasted Peanuts (Peanuts; Canola Oil (Antioxidants (319; 320)); Salt); Cashews希望这是有道理的:) -
另一个例子:
Peanuts (32.5%); Macadamia Nuts (14%; PPPG(AHA)); Hazelnuts (9%); nuts(98%)理想结果:Peanuts (32.5%), Macadamia Nuts (14%; PPPG(AHA)), Hazelnuts (9%), nuts(98%) -
我已经有了一个答案,如何用不在嵌套括号内的逗号分隔,请参阅this thread。这里不需要
gsub,直接使用strsplit。 -
@Thefourthbird "my final goal is to split the string by comma" - 这是关于分裂的。请重新关闭。
标签: r regex regex-lookarounds pcre