我需要特定请求的帮助。
我想通过将其余部分替换为空白来保持模式。
一个人会问,为什么不保留模式本身?
这是因为此代码构成了更大的清理数据方案的一部分,在该方案中,我已经在使用模式替换了。
示例:
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
一起使用。
答案 0 :(得分:2)
可以使用积极的前瞻和惰性点图案来实现:
"#.*?(?=\\(new line\\)|$)"
它匹配:
#
-一个#
字符.*?
-除换行符以外的任何0+字符,并且尽可能少(因为*?
是一个非贪婪的量词)(?=\\(new line\\)|$)
-正向超前,需要(new line)
子字符串或当前位置右边的字符串结尾。如果匹配项跨越多行,请使用(?s)
修饰符:
"(?s)#.*?(?=\\(new line\\)|$)"