Найдите строковый индекс, затем отмените поиск регулярного выражения и удалите - PullRequest
0 голосов
/ 29 января 2020

У меня такой же вопрос, как и ранее, в Python Обратный поиск в строке .

Вот пример моей очень длинной строки:

t1 = '''1281674 the crescent annandale 02/10/2019 16/10/2019 - 16/11/2019 pending 1281640 city west link rd lilyfield 02/10/2019 16/10/2019 - 16/11/2019 pending 1276160 victoria rd rozelle 25/09/2019 14/10/2019 - 15/10/2019 pending 1331626 31/12/2019 - 31/01/2020 incomplete n/a 1281674 the crescent annandale 02/10/2019 16/10/2019 - 16/11/2019'''

Обновление: 1/02/2020

Я группирую данные в списки, прежде чем помещать их в кадр данных. Я не хочу никаких данных, связанных с 'incomplete n/a' Нужно ли удалять строку или есть функция регулярного выражения для распознанного 'incomplete n/a' и группа на ее позиции?

Я хотел бы два вывода:

ONE этот список t1L = ['1281674 ', '1281640 ', '1276160 ']. Обратите внимание, что это не включает 1331626 .

TWO Эта строка должна быть разделена или переопределена (не содержит 1331626), например:

t1 = '''1281674 the crescent annandale 02/10/2019 16/10/2019 - 16/11/2019 pending 1281640 city west link rd lilyfield 02/10/2019 16/10/2019 - 16/11/2019 pending 1276160 victoria rd rozelle 25/09/2019 14/10/2019 - 15/10/2019 pending'''

Спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 29 января 2020

Вам нужно 2 регулярных выражения, чтобы получить 2 списка:

import re

t1 = '''1281674 the crescent annandale 02/10/2019 16/10/2019 - 16/11/2019 pending 1281640 city west link rd lilyfield 02/10/2019 16/10/2019 - 16/11/2019 pending 1276160 victoria rd rozelle 25/09/2019 14/10/2019 - 15/10/2019 pending 1331626 31/12/2019 - 31/01/2020 incomplete n/a 1281674 the crescent annandale 02/10/2019 16/10/2019 - 16/11/2019'''
clean = re.sub(r'\b\d{7}\b(?=(?:(?!\b\d{7}\b).)*incomplete n/a).*?$', '', t1)
print clean
res = re.findall(r'(\b\d{7}\b)', clean)
print res

Вывод:

1281674 the crescent annandale 02/10/2019 16/10/2019 - 16/11/2019 pending 1281640 city west link rd lilyfield 02/10/2019 16/10/2019 - 16/11/2019 pending 1276160 victoria rd rozelle 25/09/2019 14/10/2019 - 15/10/2019 pending 
['1281674', '1281640', '1276160']

Демонстрация и объяснение

1 голос
/ 29 января 2020

Я думаю, что есть рабочий код для вашей проблемы new_str = t1[:t1.find(re.findall('\d{7}', t1[:t1.find('incomplete n/a')])[-1])])

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

Вы можете попробовать с приведенным ниже кодом, используя l oop и условия.

    import re
    t1 = '1281674 the crescent annandale 02/10/2019 16/10/2019 - 16/11/2019 pending 1281640 city west link rd lilyfield 02/10/2019 16/10/2019 - 16/11/2019 pending 1276160 victoria rd rozelle 25/09/2019 14/10/2019 - 15/10/2019 pending 1331626 31/12/2019 - 31/01/2020 incomplete n/a 1314832 '

    result = None
    for t in t1.split(" "):

        if re.match("\d{7}",t):
            result = t
        if 'incomplete' in t:
            break

print(result)
...