代码之家  ›  专栏  ›  技术社区  ›  Diego-MX

正则表达式通过替换其周围的空格来保持模式

  •  1
  • Diego-MX  · 技术社区  · 7 年前


    我想保留一个模式,用空的空间替换其余的。

    有人会问,为什么不保持这种模式呢?
    这是因为这段代码构成了更大的数据清理方案的一部分,我已经在使用模式替换。

    例子:

    model = replace(model, "Jetta A\\d", "Jetta")  
    

    现在我想带你去 "(new line)" 这本指南加了进去 model 转到 version .

    version = replace( paste(version, model, sep = "#"), 
        "#[^(\(new line\))]", "")
    

    # 我的模式并没有遵循这一点(为了可读性,我给它留了一个反斜杠),而是用 '' .

    这几乎是可行的,但它捕获了不应该捕获的额外字符。

    另外,我添加了分隔符来区分两个部分,但是如果有办法的话,我不需要它。

    谢谢

    另外,我正在使用 R 具有 stringr 如果相关的话。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Wiktor Stribiżew    7 年前

    它可以通过正向前瞻和延迟点模式来完成:

    "#.*?(?=\\(new line\\)|$)"
    

    它匹配:

    • # # 烧焦
    • .*? *? 是非贪婪量词)
    • (?=\\(new line\\)|$) -积极的前瞻性,需要 (new line) 当前位置右侧的子字符串或字符串结尾。

    如果您的匹配跨越多行,请使用 (?s) 修饰语:

    "(?s)#.*?(?=\\(new line\\)|$)"