Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex stringr,Stru_摘录:如何进行积极的回顾?_Regex_R_Lookbehind_Stringr - Fatal编程技术网

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"