使用正则表达式分别替换定界符的开头和结尾

马克·赫克曼

我想替换$以下表达式中定界符。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java-使用最小大小和定界符分割令牌的正则表达式

正则表达式(Python)-删除以定界符开头的行并保留其他定界符

Java:replace()以正则表达式结尾的n管道定界符

如何使用正则表达式查找和替换字符串的开头和结尾

如何使用单个正则表达式替换开头和结尾是否为特定字母

正则表达式未按定界符过滤

正则表达式逗号分隔定界符

重复的正则表达式定界符

正则表达式匹配定界符

Python 正则表达式:分别替换每个匹配项

正则表达式相同,但StringTokenizer和Scanner类定界符给出不同的结果

仅在初次使用正则表达式使用多个定界符进行分隔

如何使用Rust正则表达式拆分字符串并保留定界符?

使用正则表达式匹配带有任意定界符的字段

使用自定义正则表达式定界符查找包含模式的行号

可以使用正则表达式在定界符对之间查找文本

使用多字符正则表达式模式进行拆分并保留定界符

使用JavaScript正则表达式拆分字符串,但保留定界符?

使用带有多个定界符的正则表达式(Java / Kotlin)分割文本

dart:使用正则表达式拆分字符串并包含定界符

使用正则表达式查找定界符之间的所有单词

Java:使用正则表达式拆分字符串而不删除定界符

C ++正则表达式。使用定界符获取字符串

Laravel时间24h格式正则表达式错误(无结尾定界符)

正则表达式查找替换字符串的开头和结尾

用于替换字符串开头和结尾的正则表达式模式

正则表达式删除括号的开头和结尾

正则表达式以斜杠开头和结尾

正则表达式以单词开头和结尾