我有一个看似简单的正则表达式,我希望匹配和替换。我正在处理一堆自由格式文本,而受访者有多种表示换行符的方法。其中一个是至少4个连续的空白位。另一个是重点。但是,在R(perl=FALSE
)中,我得到了一些非常奇怪的行为。正则表达式\\s{4,}|•
用一个<br>
替换整个字符串,如果我将重复更改为4(\\s{4}|•
)则返回19 <br>
。如果我删除|•
,那么它可以正常工作。如果我明确地调出4个空格字符或重点\\s\\s\\s\\s+|•
,它就可以正常工作。
重复\\s
或检查导致此类不稳定行为的重点•
是什么意思?
x = "Call Narrative <br>11/15/2017 19:53:00 J574511 <br> <br>"
replacement = "<br>"
orig_pattern = "\\s{4,}|•"
alt1 = "\\s\\s\\s\\s+|•"
alt2 = "\\s{4,}"
alt3 = "\\s{4,}|<p>"
alt4 = "\\s{4}|•"
gsub(orig_pattern,replacement,x)
#> [1] "<br>"
gsub(alt1,replacement,x)
#> [1] "Call Narrative <br>11/15/2017<br>19:53:00<br>J574511 <br> <br>"
gsub(alt2,replacement,x)
#> [1] "Call Narrative <br>11/15/2017<br>19:53:00<br>J574511 <br> <br>"
gsub(alt3,replacement,x)
#> [1] "Call Narrative <br>11/15/2017<br>19:53:00<br>J574511 <br> <br>"
gsub(alt4,replacement,x)
#> [1] "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>"
更新 它似乎与操作系统有关。问题起源于Amazon Linux 2,但在Windows上运行良好。