Regex 正则表达式通过替换其周围的空格来保持模式
我需要特定请求的帮助。Regex 正则表达式通过替换其周围的空格来保持模式,regex,regex-negation,regex-lookarounds,substitution,Regex,Regex Negation,Regex Lookarounds,Substitution,我需要特定请求的帮助。 我想保留一个模式,用空的空间替换其余的 有人会问,为什么不保持这种模式呢? 这是因为这段代码构成了更大的数据清理方案的一部分,我已经在使用模式替换 例如: model = replace(model, "Jetta A\\d", "Jetta") 将清洁所有捷达A4和A6,仅清洁捷达 现在我想把指南在模型中添加的(新行)带到版本中 所以我在做: version = replace( paste(version, model, sep = "#"), "#[
我想保留一个模式,用空的空间替换其余的 有人会问,为什么不保持这种模式呢?
这是因为这段代码构成了更大的数据清理方案的一部分,我已经在使用模式替换 例如:
model = replace(model, "Jetta A\\d", "Jetta")
将清洁所有捷达A4和A6,仅清洁捷达
现在我想把指南在模型中添加的(新行)
带到版本中
所以我在做:
version = replace( paste(version, model, sep = "#"),
"#[^(\(new line\))]", "")
也就是说,在分隔符#
之后的任何内容,如果没有跟在我的模式后面(为了可读性,我用一个反斜杠将其保留),则将其替换为'
这几乎是可行的,但它捕获了不应该捕获的额外字符
另外,我添加了分隔符来区分两个部分,但是如果有办法的话,我不需要它
有人知道发生了什么事吗
谢谢
另外,如果相关的话,我将R
与stringr
一起使用 可以使用正向前瞻和延迟点模式来完成:
"#.*?(?=\\(new line\\)|$)"
它匹配:
-a
字符
*?
-除换行符以外的任何0+字符,尽可能少(因为*?
是非贪婪量词)
(?=\\\(新行\)\$)
-正向前瞻,要求当前位置右侧紧靠(新行)
子字符串或字符串结尾
如果匹配跨越多行,请使用(?s)
修饰符:
"(?s)#.*?(?=\\(new line\\)|$)"
不,不,请(重新)阅读否定字符类的作用(提示:它否定字符,而不是整个短语)。你可能在找一个负的。可以使用积极的前瞻和惰性点:#.*(?=您的|模式|$)
。如果它必须匹配到(新行)
使用“#.*(?=\(新行)\\$)”
。谢谢@Jan和@Wiktor,我尝试了前瞻(?!…)
,但由于某种原因没有得到它。懒点做到了……我认为(?s)
不适用于我的情况,因为R
的stringr
已经将替换向量化了。了解它很好,以防它在另一个上下文中出现。