结合使用str_match和后向(U_REGEX_LOOK_BEHIND_LIMIT)

时间:2018-09-20 23:22:27

标签: r regex stringr

我正在尝试使用正则表达式提取字符串,它在这里工作:https://regexr.com/3vsd4

但是在R中运行类似的命令时会失败:

m =  "(?<=~* )([ AP_])\\w+"
x = "XY_O ~ R_Z + YPP_L_WINTER + AP_C"
str_match(x, m)[1, 1]

给出错误:

  

stri_match_first_regex中的错误(字符串,模式,opts_regex = opts(pattern)):   后向模式匹配必须具有有界的最大长度。 (U_REGEX_LOOK_BEHIND_LIMIT)

如何编辑R代码以返回"AP_C"

1 个答案:

答案 0 :(得分:0)

您的问题暗含您的代码目标是匹配AP_C。如果是这种情况,则不需要向后看。您可以从对str_match的调用中拉出匹配的子模式。

在不知道字符串的所有可能格式的情况下,类似这样的方法应该适用于您提供的示例:

m = "~.*? (AP_\\w+)"
x = "XY_O ~ R_Z + YPP_L_WINTER + AP_C"
str_match(x, m)[1, 1]

根据您的格式要求,可能还有其他正则表达式可能性。