私は以下のようなベクトルを持っています:
x <- c('3b and to 10 am ','1c and to 12 pm','#01-93 and to 10 am ')
文字列amまたはpmのないすべての数字を「none」に置き換える必要があります。
sub('.*-([0-9]+).*' ,'none',x)
しかし、これは機能しません。私の期待される出力は次のとおりです。
x <- c('none and to 10 am ','none and to 12 pm','none and to 10 am ')
どんな助けでも大歓迎です。
先読みのある正規表現を使用して、午前または午後を確認できます。ストリンガーパッケージを使用しましたが、基本関数でも機能するはずです。
library(stringr)
str_replace(x, "(\\S*[0-9]+\\S*)(?!\\S*\\s(am|pm))", "none")
# > "none and to 10 am " "none and to 12 pm" "none and to 10 am "
各要素で置き換える複数の番号がある可能性がある場合は、str_replace_all()
代わりにを使用してくださいstr_replace()
その後、余分なスペースを取り除きたい場合は、を使用することをお勧めしstringr::str_squish()
ます。
正規表現の内訳
\\S*
0個以上の空白以外の文字を探します。
[0-9]
0〜9の数字に一致します。
したがって(\\S*[0-9]+\\S*)
、両側に空白以外の文字が0個以上ある数字を探します。これは、例のすべてのケースに一致しますが、この仮定が正しくない場合は、より具体的にする必要がある場合があります。
\\s
空白文字と一致します
(am|pm)
午前または午後に一致
(?!x)
先を見越して、xが続くすべての一致を割引します
したがって、(?!\\S*\\s(am|pm))
先を見越して、次のスペースの後に午前または午後がある試合を割引きます。これは、2番目の数値を割り引く上で非常に重要です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加