Я предположил, что мы не знаем длину либо строки (представления не неотрицательные целые числа), только то, что первое следует за "Number:"
, которое находится в начале строки, а второе предшествует и сопровождается как минимум одним пробелом.
r =/
(?<=\A\Number:) # match beginning of string followed by 'Number:' in a
# positive lookbehind
\d+ # match one or more digits
| # or
(?<=\s) # match a whitespace char in a positive lookbehind
\d+ # match one or more digits
(?=\s) # match a whitespace char in a positive lookbehind
/x # free-spacing regex definition mode
str = "Number:731/13/06/2016 1823750212 10/06/2016\n\n\n\n Articolo"
str.scan(r)
#=> ["731", "1823750212"]
Если может быть Промежутки между двоеточием и "731"
, вы могли бы сделать изменить регулярное выражение следующим образом.
r =/
\A # match beginning of string followed by 'Number:' in a
# positive lookbehind
Number: # match string 'Number:'
\s* # match zero or more spaces
\K # forget everything matched so far
\d+ # match one or more digits
| # or
(?<=\s) # match a whitespace char in a positive lookbehind
\d+ # match one or more digits
(?=\s) # match a whitespace char in a positive lookbehind
/x # free-spacing regex definition mode
str = "Number: 731/13/06/2016 1823750212 10/06/2016\n\n\n\n Articolo"
str.scan(r)
#=> ["731", "1823750212"]
Здесь \K
должен быть использован, поскольку Руби не поддерживает переменную длину положительный просмотра назад.
Я встретил другую строку: 'Номер: \ n 752/14/06/2016 1976400833 13/06/2016 \ n \ n \ n \ n Articolo', я попытался перейти с:' Number:. *? (\ d {1,}). *? (\ d {5,}) ', но он не работает в коде, он в rubular, видимо, –
Убедитесь, что у вас [многострочный режим] (http: // ruby-doc. org/2.3.1/Regexp.html) включен (модификатор '/.../ m' после regexp.) Это будет делать:' text.scan /\ANumber:\s*(\d+).*? (\ d {5,})/M'. – mudasobwa