web-dev-qa-db-ja.com

文字列内のスペースの後のすべてを削除します

文字列内のスペースの後のすべてを削除したいと思います。

例えば:

"my string is sad"

戻る必要があります

"my"

私はsub/gsubを使用してこれを行う方法を見つけようとしてきましたが、これまでのところ成功していません。

13
user1214864
strsplit("my string is sad"," ")[[1]][1]
12
baptiste

または、最初のスペースの後ろにあるすべてのものを何にも置き換えません。

gsub(' [A-z ]*', '' , 'my string is sad')

そして数字で:

gsub('([0-9]+) .*', '\\1', c('c123123123 0320.1'))
10
SeeLittle

次のような正規表現を使用できます

sub(" .*", "", x)

regex demo を参照してください。

ここで、subは単一の検索と置換操作のみを実行し、.*パターンは最初のスペースを検索し(正規表現エンジンは文字列を左から右に検索するため)、.*は一致します文字列の最後まで、0個以上の文字(TRE正規表現フレーバーでは、改行文字を含めても、Perl=TRUEを使用する場合は注意してください。そうでない場合は、そうではありません)。

いくつかのバリエーション:

sub("[[:space:]].*", "", x) # \s or [[:space:]] will match more whitespace chars
sub("(*UCP)(?s)\\s.*", "", x, Perl=TRUE) # PCRE Unicode-aware regex
stringr::str_replace(x, "(?s) .*", "")   # (?s) will force . to match any chars

オンラインRデモ を参照してください。

8

正規表現でそれを実行したい場合:

gsub('([A-z]+) .*', '\\1', 'my string is sad')
4
Justin