如何用只需要的引号替换包含以下几种模式的文本?
Provide we with """"""""""""""""""""""""""""""""This is what matters"""""""""""""""""""""""""""""""".
结果应为:
Provide we with "This is what matters".
我已经尝试过了,但是效果不佳:
gsub("\"\"", "\"", txt)
此外,这些文本的引号数量不同,因此有些引号较少,而另一些引号更多。
当您连续出现多次时,用""
替换每对"
对将导致几个连续的双引号仍然保留在字符串中。您要匹配1个或多个"
字符并替换为单个"
,或者匹配并删除任何以"
开头的"
。
您可以使用
gsub('"+', '"', txt)
请参见R demo
"+
模式匹配一个或多个双引号,并用单引号替换大块。
使用stringr::str_remove_all
,您可以使用正则表达式,该正则表达式将匹配后跟"
的任何"
:
library(stringr)
str_remove_all(txt, '"(?=")')
请参见regex demo。这里的正则表达式包含(?=")
正向超前行,要求在当前位置的右边立即存在"
。
可以用PCRE正则表达式(使用perl=TRUE
在基数R中传达相同的概念:
gsub('"(?=")', '"', txt, perl=TRUE)
带有str_remove_all
的选项
library(stringr)
str_remove_all(txt, '"+')