2016-06-14 1 views
0

Я пытаюсь извлечь пару строки из разобранного PDF и у меня есть этот экстракт:извлечения данных с помощью регулярных выражений возвращает ноль

Number:731 /  13/06/2016     1823750212         10/06/2016\n\n\n\n Articolo 

http://rubular.com/r/GRI6j4Byz3

Моя цель выйти из 731 и 1823750212 значений.

Я пробовал что-то вроде text[/Number:(.*)Articolo/] для первых шагов, но он возвращает nil, а на рублевом - несколько.

Любые советы?

ответ

2

ли формат строки фиксированной (даты и длинный номер,) это будет делать трюк:

text.scan /\ANumber:(\d+).*?(\d{5,})/ 
#⇒ [[ "731", "1823750212" ]] 
+0

Я встретил другую строку: 'Номер: \ n 752/14/06/2016 1976400833 13/06/2016 \ n \ n \ n \ n Articolo', я попытался перейти с:' Number:. *? (\ d {1,}). *? (\ d {5,}) ', но он не работает в коде, он в rubular, видимо, –

+1

Убедитесь, что у вас [многострочный режим] (http: // ruby-doc. org/2.3.1/Regexp.html) включен (модификатор '/.../ m' после regexp.) Это будет делать:' text.scan /\ANumber:\s*(\d+).*? (\ d {5,})/M'. – mudasobwa

0

Я предположил, что мы не знаем длину либо строки (представления не неотрицательные целые числа), только то, что первое следует за "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 должен быть использован, поскольку Руби не поддерживает переменную длину положительный просмотра назад.

Смежные вопросы