我发现编写一个转换字符串类型的正则表达式有点困难:
[1] "[hola;adios] address1;[hola;adios] address2"
成:
[1] "[hola|adios] address1;[hola|adios] address2"
即将括号内的分号替换为竖线。我做的尝试要么无法仅替换括号内的分号(外部的分号也被替换),要么替换整个子串[hola; adios]为竖线。
如果有人能给我一些关于如何使用R语言完成这项任务的指示,我将非常感激
答案 0 :(得分:3)
您可以尝试以下gsub命令。
> x <- '[hola;adios] address1;[hola;adios] address2'
> gsub(";(?=[^\\[\\]]*\\])", "|", x, perl=T)
[1] "[hola|adios] address1;[hola|adios] address2"
;(?=[^\\[\\]]*\\])
仅匹配所有分号,
[^\[\]]*
任何字符,但不是[
或]
,零次或多次。\]
还有一个方括号。所以这将匹配[]
方括号内的所有分号。 (?=...)
称为积极前瞻断言。或强>
> gsub(";(?![^\\[\\]]*\\[)", "|", x, perl=T)
[1] "[hola|adios] address1;[hola|adios] address2"
(?!...)
称为负向前瞻,与正向前瞻断言相反。
答案 1 :(得分:1)
使用gsubfn包,可以避免使用外观。
x <- '[hola;adios] address1;[hola;adios] address2'
gsubfn('\\[[^]]*]', ~ gsub(';', '|', x), x)
# [1] "[hola|adios] address1;[hola|adios] address2"