我正在尝试选择特定字符串中的模式及其各自的位置。我在下面用一个例子解释了:
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 - “
如果有人能帮助我,我将不胜感激。我认为我定义模式的方式有问题但却无法修复它。
答案 0 :(得分:2)
您的模式pattern = "Web_797-*Web_797"
的问题是-*
部分。这意味着零或更多破折号( - )。我相信你想要的是一个破折号,然后是任何角色。所以第一次(不正确的)尝试就是
pattern = "Web_797-.*Web_797"
所在的地方。意味着"任何角色"。但那不太对劲。您只想在 next 时间之前收集字符,直到您看到Web_797,直到您最后一次看到Web_797为止。默认情况下,匹配是"贪心"采取最大可能的匹配。如果我们使用
pattern = "Web_797-.*?Web_797"
?关闭贪婪匹配,以便它只匹配下一个Web_797。