Извлеките соответствующий номер из списка элементов - PullRequest
1 голос
/ 26 марта 2019

У меня есть список элементов, смешанных с цифрами, буквами и специальными символами.

string = ['1 B, 14/A - P,1C,2A,21 C - A','3P,21B,2-A,1A','3C,2-W,ABC 200','3 Z,ABC 100 - BB','ABC 300,ABC 200','ABC 200,ABC 100','1c/A,2 - z']
string

['1 B, 14/A - P,1C,2A,21 C - A',    
 '3P,21B,2-A,1A',
 '3C,2-W,ABC 200',
 '3 Z,ABC 100 - BB',
 'ABC 300,ABC 200',
 'ABC 200,ABC 100',
 '1c/A,2 - z']

Я хочу извлечь элементы, соответствующие условию.

Условие: - элементы в списке должны быть starting with the Matching number или

начиная с ABC (Matching number)

Требуемый вывод:

starting_with_one = ['1 B, 14/A - P,1C,2A,21 C - A','3P,21B,2-A,1A','3 Z,ABC 100 - BB','ABC 200,ABC 100','1c/A,2 - z']

['1 B, 14/A - P,1C,2A,21 C - A',  --->    # Here `1 B ,14/A - P,1C` are contains the number 1  
 '3P,21B,2-A,1A',                --->   # Here `1A` Contains the number 1   
 '3 Z,ABC 100 - BB',               --->  # Here `ABC 100 - BB` Contains the number 1  
 'ABC 200,ABC 100',                   --->  # Here `ABC 100` Contains the number 1
 '1c/A,2 - z']                        ---> Here `1c/A' contains 1



starting_with_two = ['1 B, 14/A - P,1C,2A,21 C - A','3P,21B,2-A,1A','3C,2-W,ABC 200','ABC 300,ABC 200','ABC 200,ABC 100','1c/A,2 - z']

['1 B, 14/A - P,1C,2A,21 C - A',
 '3P,21B,2-A,1A',
 '3C,2-W,ABC 200',
 'ABC 300,ABC 200',
 'ABC 200,ABC 100',
 '1c/A,2 - z']

Что я пробовал:

Поиск по номеру 1

for i in string:
    print(re.search(r"(^|[^\d])(1)", i))

<_sre.SRE_Match object; span=(0, 1), match='1'>
<_sre.SRE_Match object; span=(10, 12), match=',1'>
None
<_sre.SRE_Match object; span=(7, 9), match=' 1'>
None
<_sre.SRE_Match object; span=(11, 13), match=' 1'>
<_sre.SRE_Match object; span=(0, 1), match='1'>

1 Ответ

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

Вы можете использовать

r'\b(?:ABC\s+)?1'

для определения строк, которые вы хотите сохранить. См. демо регулярных выражений .

Детали

  • \b - граница слова
  • (?:ABC\s+)? - необязательная подстрока: ABC и затем 1+ пробелов
  • 1 - 1 char.

См. Демо Python :

import re
strs = ['1 B, 14/A - P,1C,2A,21 C - A','3P,21B,2-A,1A','3C,2-W,ABC 200','3 Z,ABC 100 - BB','ABC 300,ABC 200','ABC 200,ABC 100','1c/A,2 - z']
for s in strs:
    if re.search(r'\b(?:ABC\s+)?1', s):
        print(s)

Выход:

1 B, 14/A - P,1C,2A,21 C - A
3P,21B,2-A,1A
3 Z,ABC 100 - BB
ABC 200,ABC 100
1c/A,2 - z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...