Regex Express для поиска числа в строке в ruby - PullRequest
0 голосов
/ 27 июня 2018

'xyz_1_yx' 'Хуг-1-уг'

Я попытался найти правильное выражение регулярного выражения для извлечения 1

  def find_number(image_basename)
    startIndex= 1
    endIndex= 10

    (startIndex..endIndex).each do |n|
      return n if /\b-|_#{n}-|_\b/.match(image_basename)
    end
    nil
  end

2.5.0: 376> find_number ('xyz_1_yx') => ноль

Ответы [ 3 ]

0 голосов
/ 28 июня 2018
str = 'xyz_1_y1x'

Если хотите первый '1',

r = /1/
str[r]
  #=> "1"

, который использует метод String # [] . В качестве альтернативы:

str.each_char.find { |c| c == '1' }
  #=> `'1'`

Если вы хотите все '1', используйте String # scan :

str.scan r
  #=> ["1", "1"]

Обратите внимание, что str[r] эквивалентно определению, содержит ли строка один или несколько символов '1', а str.scan(r) не говорит нам ничего, кроме числа '1', содержащегося в строке.

Если вы хотите извлечь любую цифру, измените регулярное выражение: r = /\d/.

0 голосов
/ 28 июня 2018

Согласно моему пониманию вашего вопроса, вы хотите, чтобы символы были между - или _. Если это так, вы можете просто сделать

str = 'xyz_1_yx'
str.split(/[-,_]/)[1] 
#=> '1'

str = 'xyz-129-yx'
str.split(/[-,_]/)[1] 
#=> '129'
0 голосов
/ 28 июня 2018
b
=> "asdas-12-asd" 
b.scan(/([A-z]*)(_{1}|-{1})(\d*)(_{1}|-{1})([A-z]*)/)
=> [["asdas", "-", "12", "-", "asd"]] 

UPDATE

здесь с некаптирующей группой

b.scan(/(?:[A-z]*)(?:_{1}|-{1})(\d*)(?:_{1}|-{1})(?:[A-z]*)/)
 => [["12"]] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...