有一個長文本列,我想提取兩個日期之間的字串。這兩個日期是字串的最后兩個日期。
df <- data. 框架 (f1 = c("今天是測驗 2021-09-15"。
"今天要做這件事。2020-04-05.Today is going to be 2021-09-15",
"偉大的小說。2018-08-09.這要在今天完成。2020-04-05.獅子是一種動物 2021-09-15",
"這是要在今天完成的。2020-04-05.今天是測驗 2021-09-01.星期一是第一天 2021-08-02"
)
)
預期的輸出是:
今天是測驗
今天將是
獅子是一種動物
星期一是第一天
我能夠提取最后兩個日期,但不知為何不能提取這兩個日期之間的文本。如果只有一個日期,那么在該文本之前的整個文本就會出現。 請指導。
uj5u.com熱心網友回復:
你可以使用 -
sub('(?:.*d -d -d .)? )s d -d -d $', '1'。 df$f1)
#[1] "Today is test" "Today is going tobe"
#[3] "獅子是一種動物""星期一是第一天"。
where -
(?:.*d -d -d .) -是一個可選的非捕獲組,用于一個日期。它被保留為可選的,因為第1個值在我們要提取的文本前面沒有日期。由于regex是貪婪的,.*最初確保日期是文本中倒數第二個日期。
(.*?)是一個捕獲組,從第一組中提取所有內容,直到下一個日期,即文本的結尾(d -d -d $)。
uj5u.com熱心網友回復:
你可以試試:
sub(".*? ([^-0-9. ] )[-0-9] $", "1", df$f1)
#[1] "Today is test" "Today is going tobe"
#[3] "獅子是一種動物" "星期一是第一天"。
其中.*?匹配所有非貪婪的東西,[^-0-9.]匹配所有但不是-0-9.,[-0-9]匹配-0-9和$是字串的末端。
uj5u.com熱心網友回復:
你可以使用lookarounds:
library(stringr)
str_extract(df$f1, "( ? <=.|^)D (?=s[-d] $)")
[1] "今天是測驗" "Today is going to be" "The lion is an animal" "Monday is first day"
這如何作業:
(?<=.|^): 正面的lookbehind,斷言目標字串(在你的例子中,文本)前面必須有字串的開始(^)或句號.D:目標字串表示為一個負的字符類,允許任何非數字的字符 。
(?=s[-d] $):正數的lookahaed,斷言目標字串后面必須有一個空白,然后是-和數字的任何組合和數量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/307553.html
標籤:
上一篇:用EventListenerkeyup格式化輸入欄的電話號碼
下一篇:<p>我有一些字串(CIGARs),我試圖將<code>"I"</code>前面的數字相加。<code>"I"&
