Regex stringr,Stru_摘录:如何进行积极的回顾?
非常简单的问题。我只需要使用正则表达式正向查找来捕获一些字符串,但我看不到一种方法 下面是一个示例,假设我有一些字符串:Regex stringr,Stru_摘录:如何进行积极的回顾?,regex,r,lookbehind,stringr,Regex,R,Lookbehind,Stringr,非常简单的问题。我只需要使用正则表达式正向查找来捕获一些字符串,但我看不到一种方法 下面是一个示例,假设我有一些字符串: library(stringr) myStrings <- c("MFG: acme", "something else", "MFG: initech") 库(stringr) myStrings结果_1 >结果1 [1] “制造商:acme”NA“制造商:initech” 这几乎可以做到,但我不想包括“制造商:”部分,所以这就是“积极回顾”的含义: >结果\u
library(stringr)
myStrings <- c("MFG: acme", "something else", "MFG: initech")
库(stringr)
myStrings结果_1
>结果1
[1] “制造商:acme”NA“制造商:initech”
这几乎可以做到,但我不想包括“制造商:”部分,所以这就是“积极回顾”的含义:
>结果\u 2
它抱怨需要一个“有界的最大长度”,但我不知道该在哪里指定。我如何使积极的回顾工作?确切地说,我可以在哪里指定这个“有界最大长度”?我们可以使用正则表达式查找。“回头看”只需要精确匹配
str_extract(myStrings, "(?<=MFG:\\s)\\w+")
#[1] "acme" NA "initech"
str_extract(myStrings),(?您需要使用str_match
,因为“lookback”的模式是一个文本,您不知道空格的数量:
> result_1 <- str_match(myStrings,"MFG\\s*:\\s*(\\w+)")
> result_1[,2]
##[1] "acme" NA "initech"
谢谢!是的,我的正则表达式曾在.NET中工作过,但R的正则表达式有点不同!现在有了\\s*的问题,这是有道理的。没有通用的R正则表达式,不同的模块使用不同的风格。有TRE、PCRE和ICU正则表达式风格。@WiktorStribiżew,不幸的是,我无法完全了解它们。只需在某些东西停止工作之前使用它。我ee现在,谢谢!如果我不能限制lookbehind的大小,这就是我需要做的。哇,我不知道你可以用{}在lookarounds中量化
在stringr
regex;这很令人兴奋。但在base或perl=TRUE
regex中,这将失败。这就是为什么它被称为受限宽度查找:如果可以计算长度(并且可以使用带有最小值和最大值的限制量词)它是可以使用的。啊哈!Stringr的正则表达式需要对lookbehind进行限制!大多数情况下(除了Wiktor在下面的答案中列出的情况外)lookarounds是固定宽度的,因此不能使用量词。
str_extract(myStrings, "(?<=MFG:\\s)\\w+")
#[1] "acme" NA "initech"
> result_1 <- str_match(myStrings,"MFG\\s*:\\s*(\\w+)")
> result_1[,2]
##[1] "acme" NA "initech"
> result_1 <- str_extract(myStrings,"(?<=MFG\\s{0,100}:\\s{0,100})\\w+")
> result_1
[1] "acme" NA "initech"