我正在尝试在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
有没有办法可以实现这种负面的背后隐藏?
答案 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."