【问题标题】:Removing certain regular expressions in r删除 r 中的某些正则表达式
【发布时间】:2017-02-20 09:48:49
【问题描述】:

我有一个字符串,我想只删除后面紧跟小写字母的换行符。例如,我的字符串可能包含:

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

会显示为:

一行文字

另一行

文本。

在这个例子中,我只想删除第二个换行符,这样文本就会变成:

一行文字

另一行文字

我知道模式是“\r\n[a-z]”,所以代码应该是这样的

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

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

谢谢!

【问题讨论】:

    标签: r regex line-breaks


    【解决方案1】:

    您可以在不使用环顾四周的情况下实现您所需要的,并使用像这样的 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】:

      您需要为此使用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,
      

      【讨论】:

      • 这个和我发的差不多
      【解决方案3】:

      我们可以使用正则表达式查找

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

      【讨论】:

      • 这非常有效!非常感谢您的帮助。
      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多