R

时间:2016-10-26 00:30:29

标签: r regex negative-lookbehind

我正在尝试在stringr中为r中的负面lookbehind执行正则表达式。

基本上,我有一个看起来像这样的文本数据:

See item 7 Management's Discussion and Analysis. BlahBlahBlah. Item 7 Management's Discussion and Analysis. BlahBlahBlah. Item 8 Financial Statements and Supplementary Data.

我想从“blahblahblah”之后的“第7项”中选择所有内容。判决“第8项 - 财务报表和补充数据”

所以我想要

Item 7 Management's Discussion and Analysis. BlahBlahBlah. Item 8 Financial Statements and Supplementary Data.

除了包含“参见第7项管理层的讨论和分析”

的句子之外的所有内容

现在,我正在使用此代码:

(?<!see)Item 7(.*?)Item 8 

但它并没有回归我想要的东西。

我的逻辑是不要查看包含“see”一词的句子,然后是“第7项管理层的讨论和分析”,但它似乎没有起作用。

https://regex101.com/r/yF7aQ1/3

有没有办法可以实现这种负面的背后隐藏?

1 个答案:

答案 0 :(得分:1)

不确定您是如何在R中实现它的,.*(?<!See) (item 7 .*)适用于sub,请注意查看后的空格以及可以使用ignore.case参数忽略的字母大小写

sub(".*(?<!See) (item 7 .*)", "\\1", s, ignore.case = T, perl = T)

# [1] "Item 7 Management's Discussion and Analysis. BlahBlahBlah. Item 8 Financial Statements and Supplementary Data."

另一种选择:

sub(".*(?=(?<!See) ?item 7)", "", s, ignore.case = T, perl = T)
# [1] "Item 7 Management's Discussion and Analysis. BlahBlahBlah. Item 8 Financial Statements and Supplementary Data."

使用str_extract_all()包中的stringr,似乎无法提供ignore.case选项,您可以使用[Ii]来忽略此案例:

library(stringr)
str_extract_all(s, "(?<!See )[Ii]tem 7(.*)")
# [1] "Item 7 Management's Discussion and Analysis. BlahBlahBlah. Item 8 Financial Statements and Supplementary Data."