Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby:複数の区切り文字で文字列を分割する方法(String.split)

はじめに

英語の文章を".“、”!“、”?“等の複数の区切り文字で分割する方法を調べたのでメモφ(..)

複数の区切り文字で分割する方法

区切り文字を統一後、分割する

String.splitを呼び出す前に、区切り文字を置換し統一してあげればOK!(/・ω・)/
今回のケースでは、?!.に置換後にString.splitを呼び出しています。

str = "I have a pen. I have an apple. I have a pen? I have an apple!"
key = "pen"
str = str.gsub("!",".").gsub("?",".")
p str.split(".")
# result : ["I have a pen", " I have an apple", " I have a pen", " I have an apple"]

正規表現を引数に渡す

String.split正規表現を引数として渡してあげればOK!(/・ω・)/
今回のケースでは/\.|\?|!/という正規表現を与えて、.?!で分割されるようにしました。
.?は、正規表現予約語のため、エスケープしています。

str = "I have a pen. I have an apple. I have a pen? I have an apple!"
key = "pen"
p str.split(/\.|\?|!/)
# result : ["I have a pen", " I have an apple", " I have a pen", " I have an apple"]

おまけ

区切り文字で文章を分割後、再度区切り文字を付与する書き方を載せてみましたφ(..)

str = "I have a pen. I have an apple. I have a pen? I have an apple!"
key = "pen"
spliter = /\.|\?|!/
# 区切り文字を出現順に保存
split_chars = str.split("").select{ |s| s.match(spliter) }
# 区切り文字で文章を分割後、区切り文字を再度付与
str_array = str.split(spliter).zip(split_chars).map{|s| s.join }
# 結果出力
p str_array
# result : ["I have a pen.", " I have an apple.", " I have a pen?", " I have an apple!"]

以上

参考

qiita.com

qiita.com