我有一個非常混亂的字符串矢量。這裏有一個例子:如何使用正則表達式提取R中字符串的不匹配部分?
library(tidyverse)
library(stringr)
strings <- tibble(
name = c("lorem 11:07:59 86136-1-sed",
"ipsum 14:35:57 S VARNAME-ut",
"dolor 10:37:53 1513 -2-perspiciatis",
"sit 10:48:25",
"amet 13:52:1365293-2-unde",
"consectetur 11:53:1 16018-2-omnis",
"adipiscing 11:19 17237-2-iste"
)
)
strings_out <- strings %>%
mutate(heads = str_extract(name, "^.*?\\s\\d{1,2}:\\d{1,2}:\\d{1,2}")) %>%
mutate(ends = str_replace(name, "^.*?\\s\\d{1,2}:\\d{1,2}:\\d{1,2}", ""))
strings_out[,2:3]
#> # A tibble: 7 x 2
#> heads ends
#> <chr> <chr>
#> 1 lorem 11:07:59 86136-1-sed
#> 2 ipsum 14:35:57 S VARNAME-ut
#> 3 dolor 10:37:53 1513 -2-perspiciatis
#> 4 sit 10:48:25
#> 5 amet 13:52:13 65293-2-unde
#> 6 consectetur 11:53:1 16018-2-omnis
#> 7 <NA> adipiscing 11:19 17237-2-iste
所以在這裏我有一些特色的文字,隨後可能會或可能不會被正確輸入,然後一些文本時間字符串。我想在時間之後提取字符串的末尾,但是他們沒有任何似乎與使用str_extract
的潛在正則表達式很好地對應的任何模式。我可以很容易地匹配前半部分的字符串,如heads
所示。但是,我發現提取後半部分的唯一方法是使用空字符串str_replace
,如ends
所示。
我試圖包含我在這個列表中注意到的所有常見錯誤:在時間之後沒有連字符,間隔或字符串內容的模式,沒有時間和字符串的期望的結尾一半之間的保證空間,次數缺少數字甚至冒號。
我想要做的就是能夠使用str_extract
來獲得與我通過str_replace
得到的東西接近的東西。關鍵的區別是,這裏這個表達式仍然不能正常工作的錯誤,str_extract
給我的NA
,很容易篩選和手動修復,但str_replace
只是整個字符串拷貝中在第7行
我看到懷疑我可以用一些更加棘手的方法來做到這一點,比如獲取所有NA
並在Excel中手動修復或某些內容,但我很驚訝我無法找出如何返回字符串中不匹配的部分,儘管有大量搜索並嘗試使用不同的正則表達式,包括(^)
和[^]
。有任何想法嗎?
什麼是理想的結果呢? –
很抱歉,如果不清楚。期望的結果是第二列,除了在第一列有一個的地方返回NA以外。我意識到我可以用正確的索引來代替它們,但是我發現令人費解的是,「返回字符串中無法比擬的部分」的概念似乎很難做到。 –