2

このコード (ウムラウトを含む) はなぜ:

text = "Some super text with a german umlaut Wirtschaftsprüfer"
words = text.split(/\W+/)
words.each do |w|
  puts w
end

この結果を返します (以前に与えられたウムラウトを保持しません):

=> Some
=> super
=> text
=> with
=> a
=> german
=> umlaut
=> Wirtschaftspr
=> fer

Ruby 1.9+ で文字列を分割するときにウムラウトを保持する方法はありますか?

編集: Ruby 1.9.3p286 (2012-10-12 リビジョン 37165) [x86_64-darwin11.4.2] を使用します。

4

5 に答える 5

2

なぜこのコードは [...] 以前に与えられたウムラウトを保持しないのですか?

は、単語以外のASCII文字 (つまり、 not 、 not 、 notおよび not ) に\W一致し、そのような文字であるためです。a-zA-Z0-9_ü

Ruby 1.9+ で文字列を分割するときにウムラウトを保持する方法はありますか?

確かに、たとえば空白で分割できます。これは、パターンが指定されていない場合のデフォルトです。

"Müllmann Straßenverkehr Wirtschaftsprüfer".split
=> ["Müllmann", "Straßenverkehr", "Wirtschaftsprüfer"]
于 2013-04-11T20:12:20.833 に答える
2

(スペース文字に一致: スペース、タブ、改行) で/\W+/置き換えることができます/\s+/\s

于 2013-04-11T15:06:02.020 に答える
1

Ruby docから:

/\W/ - 単語以外の文字 ([^a-zA-Z0-9_])

üは単語の文字ではないため、そこで\W一致して分割されます。\p{Lu}および\p{Ll}Unicode の大文字と小文字の Ruby 省略形なので、次のことができます。

text.split /[^\p{Ll}\p{Lu}]/

...そして、最もエキゾチックな文字列でさえも分割する必要があります。

于 2013-04-11T15:14:53.230 に答える
0

/\W/ を使用してテキストを分割したため、このリストにないものを意味します: a-zA-Z0-9

分割してみる

[^\w\ü]

これは

^ \w a-zA-Z0-9 \ü にはありません

(または、再利用できる独自のパターンを作成することを検討してください)

http://ruby-doc.org/core-1.9.3/Regexp.html参照

于 2013-04-11T15:05:57.287 に答える