私は非常に乱雑な文字列のベクトルを持っています。だからここに私がまたは、正しくその後、いくつかのより多くのテキストを入力してもしなくてもよい時間に続いて、いくつかのテキストを、特色の文字列を持っている正規表現で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
に示すように、文字列の最初の半分に簡単に一致させることができます。しかし、最後の半分を抽出する唯一の方法は、ends
に示すように、空の文字列にstr_replace
を使用することです。
私は、このリストに気付いたすべての一般的なエラーを含めるようにしました:ハイフネーション、スペースまたは文字列の内容が時間の後にない、保証されたスペースと時間と希望の文字列の最後の半分行方不明またはコロンであってもよい。
私がしたいのは、str_extract
を使用して、私がstr_replace
のものに近いものを得ることです。主な違いは、この正規表現はまだ動作しないエラーのため、str_extract
は私のためにフィルタリングして、手動で修正するのは簡単ですNA
を与えることですが、文字列全体でstr_replace
だけコピーが行7
Iに見られるように、 NA
を手に入れてExcelなどで手作業で修正するなど、いくつかのハッキーな方法でこれを行うことができると思われますが、検索にもかかわらず文字列の不一致部分を返す方法がわからないことに驚いています(^)
と[^]
を含む異なる正規表現を試してみてください。何か案は?
が得? –
申し訳ありませんが明らかでない場合。最初の列に1があれば、NAを返す以外は2番目の列が望ましい結果になります。私はちょうど通過し、正しい指数でそれらを "NA"で置き換えることができることを理解するが、私は "文字列の比類のない部分を返す"という概念がするのは難しいように思われることがわかった。 –