Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式通过替换其周围的空格来保持模式_Regex_Regex Negation_Regex Lookarounds_Substitution - Fatal编程技术网

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
已经将替换向量化了。了解它很好,以防它在另一个上下文中出现。