正则表达式替换捕获的组,想要通过linestart过滤

时间:2015-08-14 16:17:08

标签: regex r

(注意Bob之前的换行符)

my_string = "Alice & 1 & a \nBob & 2 & b" 
gsub("(?m)(?<=& )(.+?)","(\\1)", my_string, perl=TRUE)
> "Alice & (1) & (a) \nBob & (2) & (b)"

如何将正则表达式调整为仅将以Alice开头的行中的条目括起来?

我尝试过的^A的所有变体都捕获了Alice本身,或者只捕获了Alice之后群组的第一次出现。

编辑:预期输出

"Alice & (1) & (a) \nBob & 2 & b"

1 个答案:

答案 0 :(得分:1)

现在确定这是多么有效,但您始终可以将其应用于包含每行单独条目的向量

l <- strsplit(my_string, "\n")[[1]]
paste(ifelse(substr(l, 1, 5) == "Alice", gsub("(?<=& )(.+?)(?m)","(\\1)", l, perl=TRUE), l), collapse = "\n")
# [1] "Alice & (1) & (a) \nBob & 2 & b"