Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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
R中的正则表达式:在关键字前获取最后n个句子_R_Regex - Fatal编程技术网

R中的正则表达式:在关键字前获取最后n个句子

R中的正则表达式:在关键字前获取最后n个句子,r,regex,R,Regex,我试图在一个特定的关键字(在本例中为“关键字”)之前获得一些句子(在本例中为“关键字”)。如果文本中说: Hi堆栈溢出。这是一篇随机的文章。这是另一个文本。你好关键字测试测试 它应该让我在单词“关键字”前的最后3句话,即 这是一个随机文本。这是另一个文本。您好。 这是我到目前为止使用的正则表达式,但它只返回我你好。: *([A-Z].\.\s){3}(?=关键字)。* 演示:您的问题是,用于捕获组的量词只返回最后一个组 试试这个 ((?:[^.]+\){3})(?=\s?关键字)。* 请参阅:另

我试图在一个特定的关键字(在本例中为“关键字”)之前获得一些句子(在本例中为“关键字”)。如果文本中说:

Hi堆栈溢出。这是一篇随机的文章。这是另一个文本。你好关键字测试测试

它应该让我在单词“关键字”前的最后3句话,即

这是一个随机文本。这是另一个文本。您好。

这是我到目前为止使用的正则表达式,但它只返回我
你好。

*([A-Z].\.\s){3}(?=关键字)。*


演示:

您的问题是,用于捕获组的量词只返回最后一个组

试试这个

((?:[^.]+\){3})(?=\s?关键字)。*


请参阅:

另一种使用
sub
的方法:

text <- "Hi Stack Overflow. This is a random text. This is another text. Hello. Keyword Test test"

regex <- ".*?\\s*((?:[^.]+\\.){3})\\s*Keyword.*"

sub(regex, "\\1", text, perl = TRUE)
# [1] "This is a random text. This is another text. Hello."
text尝试使用以下正则表达式:

r

x <- c(
     'Hi Stack Overflow. This is a random text. This is another text. Hello. Keyword Test test',
     'This is a sentence. And another sentence. List of Keyword 1. some text 2. some text. Another sentence.'
    )
    gsub('(?m)^.*?\\b((?:[^.]*\\.){1,3})(?=\\s*[\\w\\s]+Keyword\\b).*?$','\\1', x, perl=T)

x与正则表达式一起使用的代码是什么?
sub(“^.*\.”(([^.]+\\\){3})?关键字.*”,“\\1”,您的字符串)
works因为您指定了
perl=TRUE
,所以
与换行符不匹配。在正则表达式模式的开始处添加
(?s)
(这样最终的换行符也可以与
匹配)会更安全,如果文本是
高堆栈溢出。这是一篇随机的文章。这是另一个文本。你好Test关键字Test Test
?我尝试在捕获组和正向前瞻之间添加
*
,但它返回我
高堆栈溢出。这是一篇随机的文章。这是另一个文本。
而不是
这是一个随机文本。这是另一个文本。你好。
@vdvaxel只需将单词
关键字
更改为该单词。看,是的,但是如果你不知道这个词是什么呢?关键字总是会出现,但它前面可能有另一个词或其他几个词。在理想情况下,我希望它忽略这些单词,只记下前面的完整句子。例如,它可能会说这是一个句子。还有一句话。关键词1的列表。一些文本2。一些文本。另一个句子。
理想的输出应该是
这是一个句子。还有一句话。
x <- c(
     'Hi Stack Overflow. This is a random text. This is another text. Hello. Keyword Test test',
     'This is a sentence. And another sentence. List of Keyword 1. some text 2. some text. Another sentence.'
    )
    gsub('(?m)^.*?\\b((?:[^.]*\\.){1,3})(?=\\s*[\\w\\s]+Keyword\\b).*?$','\\1', x, perl=T)