Как разрезать нить с рубином - PullRequest
2 голосов
/ 26 июля 2011

У меня есть строки:

до 100(прошло до 15 лет)
до 100 (прошло от 15 лет)
до 75
до 100 (10 лет)
до 100 (10 лет)

Я хочу вырезать строки, как

до 100
до 100
до 75
до 100
до 100

Ответы [ 3 ]

7 голосов
/ 26 июля 2011
strings = ['до 100(прошло до 15 лет)',
           'до 100 (прошло от 15 лет)',
           'до 75',
           'до 100 (10 лет)',
           'до 100 (10 лет)']

strings.map! { |str| str[/до \d+/] }

p strings    #=> ["до 100", "до 100", "до 75", "до 100", "до 100"]
6 голосов
/ 26 июля 2011

Есть несколько разных подходов к этому.Например, вы можете обрезать строку, начиная с первого (, если она есть.Однако мне нравится этот более явный подход регулярного выражения:

regex = /^до \d+/
str = "до 100(прошло до 15 лет)"
result = str[regex] # "до 100"

Регулярное выражение /^до \d+/ соответствует экземплярам до и серии цифр, которые встречаются в начале строки.Синтаксис str[regex] возвращает первое (и, в данном случае, только) совпадение или nil, если совпадения нет.

5 голосов
/ 26 июля 2011

Как насчет чего-то вроде:

cut = full.match(/^до \d*/)[0]

... то есть сопоставить привязанный к началу строки символы до, за которыми следует любое количество цифр; вернуть всю подобранную часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...