3

関連する投稿で、誰かが文字列の先頭から文字の最初の出現までを取得する方法を尋ねました。文字列の特定の文字から最後までを取得する方法を尋ねて、正規表現に関する自分の知識を広げたいと思います。

strsplitgsub で regex (not ) を使用して、最初のスペースの先頭から文字列の末尾までを取得するにはどうすればよいですか?

dob <- c("9/9/43 12:00 AM/PM", "9/17/88 12:00 AM/PM", "11/21/48 12:00 AM/PM")

ここで試してみgsub(".*? ", "", dob) ましたが、最初のスペースではなく最後のスペースから取得するので、試してみgsub(".{1}? ", "", dob)ましたが、期間のために貪欲すぎます。

最終的な解決策は次のようになります。

sapply(lapply(strsplit(dob, "\\s+"), "[", 2:3), paste, collapse=" ")
##[1] "12:00 AM/PM" "12:00 AM/PM" "12:00 AM/PM"

注: R regex は一般に正規表現と同一ではありません

4

3 に答える 3

4

試す :

gsub("^(.*?) .*$", "\\1", dob)
# [1] "9/9/43"   "9/17/88"  "11/21/48"

最初のスペースから文字列の最後までが必要な場合は、次を試してください。

gsub("^.*? (.*)$", "\\1", dob)
# [1] "12:00 AM/PM" "12:00 AM/PM" "12:00 AM/PM"
于 2013-04-09T14:06:11.487 に答える
2

文字列の先頭のインジケータを忘れました:

gsub("^.*? ", "", dob)

先頭のキャレットに注意してください。最初の解決策はあまり貪欲ではありませんでしたが、2 つの文字列を見つけてそれらを置き換えました。

于 2013-04-09T14:13:30.120 に答える
1

以下を試してください

dob [1] "9/9/43 12:00 AM/PM" "9/17/88 12:00 AM/PM"
[3] "11/21/48 12:00 AM/PM"
gsub("( . ?) (. $)", "\2", dob)
[1] "12:00 AM/PM" "12:00 AM/PM" "12:00 AM/PM"

于 2013-04-09T14:07:41.510 に答える