-2

私がこの文字列を持っているとしましょう:a = "Vallås centrum HALMSTAD" そして、すべての小文字、空白、および最初の大文字を削除したいので、a => "HALMSTAD"

私はこのようなことを試みました:

a = "Vallås centrum HALMSTAD"
b = a.gsub(/[:lower:]/, "")
puts b

しかし、私はこの出力を取得します:a => "Vaås cntum HALMSTAD"

これを行う方法についてのアイデアはありますか?

4

4 に答える 4

1

大文字の単語(連続する単語とその中の句読点を含む)を一致させ、残りを空の文字列に置き換える必要があると思います。

これに対する正規表現は

\b([A-Z']+\s*)\b

これにより、連続する単語を含むすべての大文字の単語が一致してキャプチャされます。

ルーブラリンク

考慮されるサンプル文字列:

VallåscentrumISN'TblahBlah HALMSTAD AND BLAh

そしてこれは一致します:

HALMSTAD
ではなく

于 2012-09-11T17:17:29.293 に答える
1

「小文字のみを削除する」(スペースを保持する)か、「大文字のみを保持する」(スペースを失う)かによって異なります。たぶん、次の方があなたが求めているものに近いと思いますか?

a = "Vallås centrum HALMSTAD"
b = a.gsub(/[^[:upper:]]+/, "")
puts b # => "VHALMSTAD"
于 2012-09-11T17:19:52.973 に答える
1

これを試して:

a = "Vallås centrum ISN'T blah Blah HALMSTAD AND "
b = a.gsub(/\b[A-Z]?[^A-Z\s']+\s*\b/, '')
puts b

これはほとんどの小文字の単語を処理する必要がありますが、句読記号、疑問符、感嘆符、非ASCII文字などがある他の可能性のある場合に対処する必要があります...

ここでこれをいじることができます


@TimPietzckerの非ASCII文字のコメントを考慮A-Zして、をPOSIXブラケット式に置き換えることができます。[[:upper:]]


更新
これはより完全な解決策になります:

ほとんどの小文字の単語を見つけるための正規表現(これはさらに多くの記号に拡張できます):

\b(?:[^\s]?[[:lower:]][^\s]?)+\s*\b[?!]?

ここで正規表現をテストします

Rubyコード:

a = "Vallås centrum ISN'T blah Blah HALMSTAD AND BlaG and bLag's? FINISH "
b = a.gsub(/\b(?:[^\s]?[[:lower:]][^\s]?)+\s*\b[?!]?/, '')
puts b

ここでコードをいじる

于 2012-09-11T17:43:30.577 に答える
1

これを試して:

your_string.split.last
于 2012-09-11T19:01:38.847 に答える