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)