使用正则表达式匹配在R中的字符串内进行模式查找

时间:2018-01-23 15:59:13

标签: r regex

我正在尝试选择特定字符串中的模式及其各自的位置。我在下面用一个例子解释了:

String = "Web_797-Web_797-Web_797-Web_797-PCP_IM_PAR-Pharm_1-Pharm_1-
Web_797-PCP_IM_PAR-Prior_OP-Web_797-Prior_OP-Event_0-"

pattern = "Web_797-*Web_797" (Web_797 followed by Web_797 with anything in between)

我使用了以下功能:

 str_locate_all(String,pattern)[[1]]

我得到以下结果:

      start end
[1,]     1  15
[2,]    17  31

这是我需要的部分内容。但是我的模式无法选择以下组合(以黑色突出显示)。

String =“Web_797-Web_797-Web_797-Web_797-PCP_IM_PAR-Pharm_1-Pharm_1-     的 Web_797-PCP_IM_PAR-Prior_OP-Web_797 -Prior_OP-Event_0 - “

如果有人能帮助我,我将不胜感激。我认为我定义模式的方式有问题但却无法修复它。

1 个答案:

答案 0 :(得分:2)

您的模式pattern = "Web_797-*Web_797"的问题是-*部分。这意味着零或更多破折号( - )。我相信你想要的是一个破折号,然后是任何角色。所以第一次(不正确的)尝试就是 pattern = "Web_797-.*Web_797"所在的地方。意味着"任何角色"。但那不太对劲。您只想在 next 时间之前收集字符,直到您看到Web_797,直到您最后一次看到Web_797为止。默认情况下,匹配是"贪心"采取最大可能的匹配。如果我们使用 pattern = "Web_797-.*?Web_797"?关闭贪婪匹配,以便它只匹配下一个Web_797。