Regex: разделить символы с помощью "/" - PullRequest
2 голосов
/ 16 марта 2020

У меня есть эти строки, например: ['2300LO/LCE','2302KO/KCE']

Я хочу получить такой вывод: ['2300LO','2300LCE','2302KO','2302KCE']

Как я могу сделать это с Regex в Python?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 16 марта 2020

Вы можете создать простой генератор, который выдает пары для каждой строки. Затем вы можете объединить их в один список с помощью itertools.chain()

from itertools import product, chain

def getCombos(s):
    nums, code = re.match(r'(\d+)(.*)', s).groups()
    for pair in product([nums], code.split("/")):
        yield ''.join(pair) 

a = ['2300LO/LCE','2302KO/KCE']

list(chain.from_iterable(map(getCombos, a)))
# ['2300LO', '2300LCE', '2302KO', '2302KCE']

Это дает дополнительное преимущество или работает со строками типа '2300LO/LCE/XX/CC', что даст вам ['2300LO', '2300LCE', '2300XX', '2300CC',...]

2 голосов
/ 16 марта 2020

Вы можете попробовать что-то вроде этого:

list1 = ['2300LO/LCE','2302KO/KCE']
list2 = []

for x in list1:        
    a = x.split('/')

    tmp = re.findall(r'\d+', a[0]) # extracting digits
    list2.append(a[0])
    list2.append(tmp[0] + a[1])

print(list2)
1 голос
/ 16 марта 2020

Это может быть реализовано с помощью простых разбиений строк.

Поскольку вы задали вывод с помощью регулярного выражения, вот ваш ответ.

list1 = ['2300LO/LCE','2302KO/KCE']

import re
r = re.compile("([0-9]{1,4})([a-zA-Z].*)/([a-zA-Z].*)")
out = []
for s in list1:
  items = r.findall(s)[0]
  out.append(items[0]+items[1])
  out.append(items[2])

print(out)

Объяснение для регулярного выражения - (4 ди git число), затем (любые символы), затем / и (остальные символы).

они сгруппированы с (), так что когда вы используете find, все становится отдельными элементами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...