删除r中的某些正则表达式

时间:2016-10-11 18:31:38

标签: r regex line-breaks

我有一个字符串,我想在其中删除紧跟着小写字母的换行符。例如,我的字符串可能包含:

  

一行文字\ r \ n另一行\ r \ nof text,

将显示为:

  

一行文字

     

另一行

     

的文字。

在这个例子中,我只想删除第二个换行符,然后读取文本:

  

一行文字

     

另一行文字

我知道模式是" \ r \ n [a-z]",所以代码应该像

gsub("\r\n[a-z]","")

但我无法提出在保留小写字母的同时删除换行符的代码。

谢谢!

3 个答案:

答案 0 :(得分:2)

我们可以使用正则表达式外观

txtN <- gsub("\r\n(?=[a-z])", "", txt, perl = TRUE)
cat(txtN, sep="\n")
# one line of text 
# another line of text,

答案 1 :(得分:2)

您可以在不使用外观的情况下实现所需,并使用TRE正则表达式

s <- "one line of text \r\n another line \r\nof text,"
res <- gsub("\r?\n([a-z])","\\1", s)
cat(res)

请参阅IDEONE demo

如果您在模式周围使用(...),则可以定义捕获组,您可以从替换模式中引用其中的内容。

模式详细信息

  • \r?\n - 换行符(\r\n\n
  • ([a-z]) - 第1组内的小写ASCII字母。

替换

  • \1 - 对第1组内容的编号反向引用。

有关的更多信息:

P.S。:如果你热衷于使用PCRE正则表达式,除了前瞻性支持之外,还有一个非常好的构造 - 一个匹配任何样式换行符的\R。然后,我建议:

gsub("\\R(?=[a-z])", "", txt, perl = TRUE)

答案 2 :(得分:1)

您需要使用positive lookahead

例如:

text = "one line of text \r\n another line \r\nof text,"

fixed = gsub("\r\n(?=[a-z])", "", text, perl = T)

cat(fixed)
#> one line of text 
#>  another line of text,