DATA.each do |l|
chars = l[/^([[:alpha:]]+)/, 1] # [:alpha:] = [a-zA-Z]
puts chars
end
__END__
abc123
abcd23423
# >> abc
# >> abcd
Если вы хотите, чтобы захватить альфа в массив сделать что-то вроде этого:
ary = []
DATA.each do |l|
ary << l[/^([[:alpha:]]+)/, 1] # [:alpha:] = [a-zA-Z]
end
ary # => ["abc", "abcd"]
__END__
abc123
abcd23423
Я не использовал \D
потому что это означает, что все нечисловые (AKA [^0-9]
), но это может быть опасно, если вы собираетесь работать в любой другой текст, который не является альфа-символ:
'abc_-$%#123'[/^(\D+)/, 1] # => "abc_-$%#"
По той же причине \w
не всегда безопасны:
'abc_-$%#123'[/^(\w+)/, 1] # => "abc_"
[[:alpha:]]
это символы алфавита [a-zA-Z]
'abc_-$%#123'[/^([a-zA-Z]+)/, 1] # => "abc"
'abc_-$%#123'[/^([[:alpha:]]+)/, 1] # => "abc"
являются коды продуктов должны быть на одной и той же линии или отдельные строки? –
@Greg: Исходный код вопроса, отдельные строки. Я выделил простой текст. @Blankman: посмотрите на предварительный просмотр в следующий раз! –