REGEX通过替换周围的空白来保留图案

时间:2019-01-31 20:44:51

标签: regex regex-negation regex-lookarounds substitution

我需要特定请求的帮助。
我想通过将其余部分替换为空白来保持模式。

一个人会问,为什么不保留模式本身?
这是因为此代码构成了更大的清理数据方案的一部分,在该方案中,我已经在使用模式替换了。

示例:

copy_if( begin(input), end(input), back_inserter(output), 
         [&]( auto c ) { return vowels.find(c) != string::npos; } );

将清洁所有捷达的A4和A6到捷达。

现在我想将指南在model = replace(model, "Jetta A\\d", "Jetta") 中添加的"(new line)"带到model
所以我在做:

version

也就是说,在分隔符version = replace( paste(version, model, sep = "#"), "#[^(\(new line\))]", "") 之后没有跟随我的模式的任何内容(为了可读性,我在其中留了一个反斜杠),然后将其替换为#

这几乎可以用,但是正在捕获不应该使用的多余字符。

此外,我添加了分隔符以区分两个部分,但是如果有解决方法,则不需要它。

有人知道发生了什么吗?

谢谢。

此外,如果需要的话,我正在将''R一起使用。

1 个答案:

答案 0 :(得分:2)

可以使用积极的前瞻和惰性点图案来实现:

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

它匹配:

  • #-一个#字符
  • .*?-除换行符以外的任何0+字符,并且尽可能少(因为*?是一个非贪婪的量词)
  • (?=\\(new line\\)|$)-正向超前,需要(new line)子字符串或当前位置右边的字符串结尾。

如果匹配项跨越多行,请使用(?s)修饰符:

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