R - 正则表达式空格模式过度匹配

时间:2018-03-16 13:28:14

标签: r regex

我有一个看似简单的正则表达式,我希望匹配和替换。我正在处理一堆自由格式文本,而受访者有多种表示换行符的方法。其中一个是至少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上运行良好。

0 个答案:

没有答案