R 中的正则表达式负后视

Regex negative lookbehind in R

我正在尝试在 stringr 中做一个正则表达式以在 R 中进行负向回顾。

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

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

我想 select 从 "blahblahblah." 句子之后的 "Item 7" 到 "Item 8-Financial Statements and Supplementary Data"

的所有内容

所以我想要

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

除了包含 "see item 7 Management's Discussion and Analysis"

的句子之外的所有内容

现在,我正在使用这段代码:

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

但它没有返回我想要的。

我的逻辑是不查看包含单词 "see" 后跟 "item 7 Management's Discussion and Analysis" 的句子,但它似乎不起作用。

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

有什么方法可以实现这种负面回溯?

不确定你是如何在 R 中实现它的,.*(?<!See) (item 7 .*)sub 一起工作,只是要小心 see 后面的 space 和你可以忽略的字母大小写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."

使用 stringr 包中的 str_extract_all(),似乎没有提供 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."