Regex получить текст выровнять по левому краю - PullRequest
0 голосов
/ 27 января 2020

Я новичок в мире Regex и просмотрел многие сайты, не найдя того, что искал. У меня есть файл, где мне нужно получить адрес. Адрес выровнен по левому краю бумаги (текст в той же строке справа).

Some information on multiple line (6)
that I don't need and can't paste because
it contains some personal information. 
So imagine a lot of text here...
So imagine a lot of text here...
So imagine a lot of text here...

Sold To                                              Bill To
Some Cie                                             Some Other Cie
1111 chemin some-road                                2222 chemin some-other-road
City-Here QC J0Q 1W0                                 Other City-Here QC J0Q 1W0 
Canada                                               Canada

Мне нужно получить текст со стороны «Продано». Я пытался использовать \ r, но он ничего не возвращает! Я не знаю, как извлечь текст с начала строки, пока не появится куча пробелов. Пример: Некоторые Cie (если более 1 пробела, go до следующей строки)

, тогда у меня есть: Sold\sTo(?=\s{2,100}), но оно не будет работать, пока (?=\s{2, 100}) возвращает все !! !

Я видел это : ^((?:\S+\s+){2}\S+).*, что очень близко к тому, что я хочу, но я не понимаю всего этого. Я хотел бы соответствовать от 2 до 5 слов.

Тогда у меня есть это: ^([A-Za-z0-9-]*)(?=\s{2,100}), которое я думал, будет соответствовать В начале строки, пока не будет более 2 пробелов. Что я делаю не так?

Мне нужно сделать это в чистом регулярном выражении (флаги не разрешены).

Я полностью потерян. Некоторое руководство будет высоко ценится.

1 Ответ

0 голосов
/ 27 января 2020

Вы довольно близки к вашей последней попытке. Вот что я придумал:

^.+?(?=[^\S\n]{2,})

Объяснение:

  • .+ - Один или несколько символов
    • ? - Не жадный, чтобы дать приоритет следующей части, т.е. избегать совпадения с кучей пробелов
  • [^\S\n] - Любой символ пробела, кроме новой строки (это похоже на \s минус \n)
    • {2,} - Два или более

Совпадения из примера:

Sold To
Some Cie
1111 chemin some-road
City-Here QC J0Q 1W0
Canada

Попробуйте Regex101

Простой пример в Python:

import re

pattern = re.compile(r'^.+?(?=[^\S\n]{2,})')

with open(filename) as f:
    for line in f:
        m = pattern.match(line)
        if m:
            print(m.group())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...