我想替换$
以下表达式中的定界符。
s <- "something before stuff $some text$ in between $1$ and after"
开始和结束时的替换必须不同,即
begin <- "<B>" # replacement for 1st delimiter
end <- "<E>" # replacement for 2nd delimiter
结果应该是
str_replace_all(s, SOME-REGEX-MAGIC)
> [1] "something before stuff <B>some text<E> in between <B>1<E> and after"
我不是regex专业人士,因此无法弄清楚如何分别处理定界符的开头和结尾。
有任何想法吗?谢谢你的时间!
不成功的想法
仅出于记录目的,我完全不成功的想法更接近于解决方案:
# Using lookarounds I get the following, but I would need it to be non-greedy
str_extract(s, perl("(?<=\\$).*(?=\\$)"))
"some text$ and some more $1"
# also greedy
str_match(s, "(\\$)(.*)(\\$)")
[,1] [,2] [,3] [,4]
[1,] "$some text$ and some more $1$" "$" "some text$ and some more $1" "$"
将此正则表达式与一起使用gsub()
。替换使用反向引用(例如\\1
)。
ptn <- "\\$(.*?)\\$" # Non-greedy find between delimiters
replacement <- "<B>\\1<E>" # \\1 indicates back-reference
gsub(ptn, replacement, s)
[1] "something before stuff <B>some text<E> in between <B>1<E> and after"
反向引用\\1
指示regex中的第一个通配符表达式-即parens中的字符串- (.*?)
。该?
修改使匹配非贪婪。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句