正则表达式以捕获多行报价

时间:2016-04-04 09:15:27

标签: regex r text-processing

...,"My quote goes on
to multiple lines
like this",...

我如何在正则表达式中捕捉到它?我希望在替换中以

结束
....,"My quote goes on to multiple lines like this",...

我试过

"(?<!\")\r\n(?!\")"

这是为了找到一个不以引号结尾的换行符,而下一行也不以引号开头。

使用正则表达式在R中完成以下替换,但没有运气......

newDF = gsub( "(?<!\")\r\n(?!\")", " ", newDF, perl = TRUE)

2 个答案:

答案 0 :(得分:0)

您可以匹配引用的子字符串,然后使用gsubfn来替换引用的子字符串中的换行符:

library(gsubfn)
s = "...,\"My quote goes on\r\nto multiple lines\r\nlike this\",..."
gsubfn("\"[^\"]+\"", function(x) gsub("(?:\r?\n)+", " ", x), s)
[1] "...,\"My quote goes on to multiple lines like this\",..."

"[^"]+"模式匹配所有引用的子字符串,然后(?:\r?\n)+匹配可选CR(\r?)的1个或多个序列,后跟1个LF(用空格替换)

或者,您可以使用像

这样的PCRE正则表达式获得类似的结果
gsub("(?:\r?\n)+(?!(?:[^\"]|\"[^\"]*\")*$)", " ", s, perl=T)
[1] "...,\"My quote goes on to multiple lines like this\",..."

请参阅regex demo(?!(?:[^\"]|\"[^\"]*\")*$)前瞻确保字符串结尾没有引号。

答案 1 :(得分:0)

> x <- "My quote goes on
+ to multiple lines
+ like this"

> gsub("\\n", " ", x)
[1] "My quote goes on to multiple lines like this"

不要忘记加倍反斜杠。