2

1行に1つずつ電話番号がたくさんあります:

[Home] (202) 121-7777 
C (202) 456-1111
[mobile] 55 55 5 55555 
[Work] (404) 555-1234 
[Cell] (505) 555-1234
W 303-555-5555
M 777-555-5555
c 12346567s

大文字または小文字の「c」を含む最初のものを取得したいと思います。

これまでのところ、これ/^.*[C].*$/iとそれが一致C (202) 456-1111する 、[Cell] (505) 555-1234およびがありc 12346567sます。最初のものだけを返すにはどうすればよいですか? つまり、一致はC (202) 456-1111.

私はやみくもにどこにでも疑問符を付けてきましたが、成功していません。

違いがあればRubyを使用しています http://www.rubular.com/r/h6ReB9IN8t

編集:これはHrishiが指摘した別の質問ですが、行全体に一致するように適応させる方法がわかりません.

4

4 に答える 4

2

方法を試すmatch。次に例を示します。

list = <<EOF
[Home] (202) 121-7777 
C (202) 456-1111
[mobile] 55 55 5 55555 
[Work] (404) 555-1234 
[Cell] (505) 555-1234
W 303-555-5555
M 777-555-5555
c 12346567s
EOF

アップデート

#match line with "c" letter in line, even that are part of word
puts list.match(/^.*C.*$/i) 

#match line with "c" letter in line, that are not a part of word
puts list.match(/^\W*C\W.*$/i) 
于 2013-08-21T11:20:59.977 に答える
1

文字列を改行文字で分割し、select要件に一致する部分文字列を分割して最初のものを取得します。

str = '[Home] (202) 121-7777 
C (202) 456-1111
[mobile] 55 55 5 55555 
[Work] (404) 555-1234 
[Cell] (505) 555-1234
W 303-555-5555
M 777-555-5555
c 12346567s'

p str.split(/\n/).select{|el| el =~ /^.*[C].*$/i}[0]

または使用match

p str.match(/^.*[C].*$/i)[0]

編集:

または、正確に で始まる最初のチャンクを見つけたい場合は、Cこれを試してください:

p str.match(/^C.*$/)[0]
于 2013-08-21T11:21:46.223 に答える