はじめに
英語の文章を".“、”!“、”?“等の複数の区切り文字で分割する方法を調べたのでメモφ(..)
複数の区切り文字で分割する方法
区切り文字を統一後、分割する
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!"]
以上