用多个引号清洁文本,只留下一对引号

问题描述 投票:0回答:2

如何用只需要的引号替换包含以下几种模式的文本?

Provide we with """"""""""""""""""""""""""""""""This is what matters"""""""""""""""""""""""""""""""".

结果应为:

Provide we with "This is what matters".

我已经尝试过了,但是效果不佳:

 gsub("\"\"", "\"", txt)

此外,这些文本的引号数量不同,因此有些引号较少,而另一些引号更多。

r regex string gsub
2个回答
1
投票

当您连续出现多次时,用""替换每对"对将导致几个连续的双引号仍然保留在字符串中。您要匹配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)

0
投票

带有str_remove_all的选项

library(stringr)
str_remove_all(txt, '"+')
© www.soinside.com 2019 - 2024. All rights reserved.