regex - удалить нежелательную подстроку после второго появления дефиса в Python - PullRequest
2 голосов
/ 29 апреля 2020

Ниже приведены строки, из которых мне нужно вытащить значимые идентификаторы.

'12345-1-abcde-aBCD'
'123-Abcdefghi abcdefghijkl'
'1234567-1-AB-ABC A/1 ABC (AB1234)'
'12345-ABC-Abcdefghijkl'
'123456-Abcdefgh'
'12345-AB1CDE'

Регулярное выражение должно соответствовать всем вышеперечисленным критериям и пройти для всех случаев, чтобы дать ниже вывод

12345-1
123
1234567-1
12345
123456
12345

Regex должен опустить часть из -hyphen, если есть буквы.

1 Ответ

1 голос
/ 29 апреля 2020

Вы можете сделать это:

import re

l = ['12345-1-abcde-aBCD',
     '123-Abcdefghi abcdefghijkl', 
     '1234567-1-AB-ABC A/1 ABC (AB1234)',  
     '12345-ABC-Abcdefghijkl',
     '123456-Abcdefgh',
     '12345-AB1CDE',]

In [10]: for s in l:
    ...:     print(re.match(r'^(\d+[-]?\d+?)',s))
    ...:                 
<re.Match object; span=(0, 7), match='12345-1'>
<re.Match object; span=(0, 3), match='123'>
<re.Match object; span=(0, 9), match='1234567-1'>
<re.Match object; span=(0, 5), match='12345'>
<re.Match object; span=(0, 6), match='123456'>
<re.Match object; span=(0, 5), match='12345'>

Если у вас может быть несколько дефисов с последующими цифрами, вы можете сделать что-то вроде:

l = ['12345-1-abcde-aBCD',
     '123-Abcdefghi abcdefghijkl',
     '1234567-1-AB-ABC A/1 ABC (AB1234)',
     '12345-ABC-Abcdefghijkl',
     '123456-Abcdefgh',
     '12345-AB1CDE',
     '12345-1-1-ABC',
     '1-2-3-4-5-A-B-C-D-E-F-/-(AB12345)0',
     '12345-1A Abcd',]

In [31]: for s in l: 
    ...:     match = re.match(r'^([\d|-]*)(?![A-Za-z])',s)  
    ...:     print(match.group(0).rstrip('-')) 
    ...:                                                                                            
12345-1
123
1234567-1
12345
123456
12345
12345-1-1
1-2-3-4-5
12345
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...