Многострочная строка Python Regex - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь получить последнее число из этой строки в каждой строке, но мой код может получить только «25». Я хочу получить 15, 10, 5, 5 и 25.

import re

string = """

1073811-S0-A M3S FRT SUBFRAME MNT FRT INR LH 15
1073851-S0-A M3S REAR QUARTER INNER LH 10 
1080023-S0-C M3 ASY, COWL SIDE, LH 5 
1080024-S0-C M3 ASY, COWL SIDE, RH 5
1080473-S0-B M3 ASY, SHOTGUN TOWER, LH 25
"""

qty = re.findall(r'\d{1,3}$', string)

print(qty)

Ответы [ 2 ]

2 голосов
/ 19 января 2020

Вы можете использовать флаг re.MULTILINE:

qty = re.findall(r'\d{1,3}$', string, flags=re.MULTILINE)

Вы получаете: ['15', '5', '25']

Но некоторые строки также заканчиваются конечными пробелами. Таким образом, вы можете использовать группу с необязательным пробелом:

qty = re.findall(r'(\d{1,3})\s*$', string, flags=re.MULTILINE)

Вы получите: ['15', '10', '5', '5', '25'].

Вы также можете искать номера, за которыми следует дополнительный пробел и конец строки. Вы можете сделать это с положительным взглядом:

qty = re.findall(r'\d{1,3}(?=\s*$)', string, flags=re.MULTILINE)
0 голосов
/ 19 января 2020
import re
str="""1073811-S0-A M3S FRT SUBFRAME MNT FRT INR LH 15
1073851-S0-A M3S REAR QUARTER INNER LH 10 
1080023-S0-C M3 ASY, COWL SIDE, LH 5 
1080024-S0-C M3 ASY, COWL SIDE, RH 5
1080473-S0-B M3 ASY, SHOTGUN TOWER, LH 25"""
pattern = re.compile(r'(?m)(\d+)\s*$')
match = pattern.findall(str)
for i in match:
  print(i)

вывод: 15 10 5 5 25

...