извлечь число после и до некоторой строки из текста, используя python3 - PullRequest
0 голосов
/ 25 марта 2019

Как извлечь строку до и после определенной строки?и извлекать только 12 цифр для номера броска?

input_file ="my bday is on 04/01/1997 and 
            frnd bday on 28/12/2018, 
            account no is A000142116 and 
            valid for 30 days for me and 
            for my frnd only 4 DAYS.my roll no is 130302101786
            and register number is 1600523941. Admission number is 
            181212001103" 

for line in input_file:
    m1 = re.findall(r"[\d]{1,2}/[\d]{1,2}/[\d]{4}", line)
    m2 = re.findall(r"A(\d+)", line)
    m3 = re.findall(r"(\d+)days", line)
    m4 = re.findall(r"(\d+)DAYS", line)
    m5 = re.findall(r"(\d+)", line)
    m6 = re.findall(r"(\d+)", line)
    m7 = re.findall(r"(\d+)", line)
    for date_n in m1:
       print(date_n)
    for account_no in m2:
       print(account_no)
    for valid_days in m3:
       print(valid_days)
    for frnd_DAYS in m4:
       print(frnd_DAYS)
    for roll_no in m5:
       print(roll_no)
    for register_no in m6:
       print(register_no)
    for admission_no in m7:
       print(admission_no)

Ожидаемый результат:

04/01/1997
28/12/2018
A000142116
30 days
4 DAYS
130302101786
1600523941
181212001103

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Используйте одно выражение для всех из них:

\b[A-Z]?\d[/\d]*\b(?:\s+days)?

См. демо на regex101.com .
Вам нужно уточнить здесь формат «номера счета».

0 голосов
/ 25 марта 2019

Я бы использовал шаблон регулярного выражения с чередованием для всех возможных совпадений:

\d{2}/\d{2}/\d{4}|\d+ days|[A-Z0-9]{10,}

Это соответствует либо дате, номеру days, либо номеру счета. Для номеров счетов я предполагаю, что они имеют длину 10 или более, состоящую только из букв и цифр.

input_file = """my bday is on 04/01/1997 and 
                frnd bday on 28/12/2018, 
                account no is A000142116 and 
                valid for 30 days for me and 
                for my frnd only 4 DAYS.my roll no is 130302101786
                and register number is 1600523941. Admission number is 
                181212001103"""

results = re.findall(r'\d{2}/\d{2}/\d{4}|\d+ days|[A-Z0-9]{10,}', input_file, flags=re.IGNORECASE)
print(results)

['04/01/1997', '28/12/2018', 'A000142116', '30 days', '4 DAYS', '130302101786',
 '1600523941', '181212001103']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...