2017-08-07 12 views
1

私はRails 5を使用しています。最初の文字が文字ではない文字列の最初からすべての単語を削除するにはどうすればいいですか(つまり〜〜/ \ p {L} /)?私は、文字列条件に基づいてRails文字列をトリミングするにはどうすればよいですか?

"1000 22 cc33 dfdsf" 

を持っているのであれば、私は結果が

同様
"cc33 dfdsf" 

になりたい文字列が

"7nnn 2000 388 a 4000 bbb" 

だったら、私は結果が

ことを期待します
"a 4000 bbb" 

答えて

2

「単語」は、空白以外の記号のまとまりに過ぎません。 - 文字列の先頭または前の試合終了(したがって、我々は唯一の連続取得

  • \G

    あなたはRuby demo online

    詳細を参照してください

    rx = /\G[^[:space:]\p{L}][^[:space:]]*[[:space:]]*/ 
    
    puts "1000 22 cc33 dfdsf".gsub(rx, '')    # => cc33 dfdsf 
    puts "7nnn 2000 388 a 4000 bbb".gsub(rx, '') # => a 4000 bbb 
    

    を使用することができます文字列の先頭から一致します)

  • 01 0+非空白
  • [[:space:]]* - - 0+空白- 空白ではなく文字
  • [^[:space:]]*ない文字。

もう1つの正規表現は/\A(?:[^[:space:]\p{L}][^[:space:]]*[[:space:]]*)+/です。ここでは、\Aが文字列の先頭と一致し、(?:...)+が上記のパターンの1つ以上の連続した出現と一致します。

:あなたは、具体的英数字の単語を一致させたい場合は、それはあなたが文字列の先頭に数字で始まるすべての単語を削除したい場合は、あなたが

/\G\p{N}[[:alnum:]]*[^[:alnum:]]*/ 

または

を使用することであり、 \p{N}は任意の数字、 [[:alnum:]]マッチ任意の英数字と [^[:alnum:]]マッチ英数字でない任意の文字にマッチする
/\A(?:\p{N}[[:alnum:]]*[^[:alnum:]]*)+/ 

another Ruby demoを参照してください。

+1

はい、言葉についての私の緩やかな定義 - 「空白以外の記号の塊」についてあなたは正しいです。 – Dave

+1

確かです。答えは常に正確で、詳細な説明が豊富です。 – Dave

0

このパターンは、条件によって "単語"が最初に出現するまで検索し、文字列の最後まですべてを取ります。一致したグループから結果を抽出することができます。あなたがラインターミネータが含ま必要がある場合

.*?\b([A-Za-z][\s\S]*) 

.*?\b([A-Za-z].*) 

は、それを交換します。

関連する問題