很简单的问题。我只需要使用正则表达式正向查找捕获一些字符串,但我没有找到一种方法来做到这一点。
这是一个例子,假设我有一些字符串:
library(stringr)
myStrings <- c("MFG: acme", "something else", "MFG: initech")
我想提取前缀为“MFG:”的单词
> result_1 <- str_extract(myStrings,"MFG\\s*:\\s*\\w+")
>
> result_1
[1] "MFG: acme" NA "MFG: initech"
That almost这样做,但我不想包含“MFG:”部分,所以这就是“积极的向后查找”的用途:
> result_2 <- str_extract(myStrings,"(?<=MFG\\s*:\\s*)\\w+")
Error in stri_extract_first_regex(string, pattern, opts_regex = attr(pattern, :
Look-Behind pattern matches must have a bounded maximum length. (U_REGEX_LOOK_BEHIND_LIMIT)
>
它抱怨需要“有限的最大长度”,但我不知道在哪里指定。如何进行积极的事后工作?确切地说,我可以在哪里指定这个“有界最大长度”?
你需要使用str_match
因为“lookbehind”的模式是文字,并且您只是不知道空格的数量:
> result_1 <- str_match(myStrings,"MFG\\s*:\\s*(\\w+)")
> result_1[,2]
##[1] "acme" NA "initech"
您需要的结果将在第二列中。
请注意str_extract
不能在这里使用,因为该函数会删除捕获的值。
还有一个好处:lookbehind 不是无限宽度, 但它是宽度受限在 ICU 正则表达式中。所以,这也将起作用:
> result_1 <- str_extract(myStrings,"(?<=MFG\\s{0,100}:\\s{0,100})\\w+")
> result_1
[1] "acme" NA "initech"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)