У меня есть следующая строка, которую я анализирую из другого файла: «CHEM1 (5GL) CH3M2 (55LB) CHEM3954114 (50KG)». Я хочу разделить их на отдельные значения, чего я достиг с помощью функции .split(). . Итак, я получаю их в виде массива:

x = ['CHEM1(5GL)', 'CH3M2(55LB)','CHEM3954114(50KG)']

Теперь я хочу разделить их на 3 сегмента и сохранить их в 3 других переменных, чтобы я мог написать их, чтобы преуспеть как таковые:

a = CHEM1
b = 5
c = GL

Для первого массива, затем я вернусь ко второму массиву:

a = CH3M2
b = 55
c = LB

И наконец :

a = CHEM3954114
b = 50
c = KG

Я не уверен, как это сделать, так как я все еще новичок в python. Насколько я могу судить, я повторяю функцию разделения несколько раз, но я считаю, что должен быть лучший способ сделать это.

Спасибо.

3
Ahmed 17 Янв 2022 в 09:19

3 ответа

Используя re.findall мы можем попробовать:

x = ['CHEM1(5GL)', 'CH3M2(55LB)','CHEM3954114(50KG)']
for inp in x:
    matches = re.findall(r'(\w+)\((\d+)(\w+)\)', inp)
    print(matches)

# [('CHEM1', '5', 'GL')]
# [('CH3M2', '55', 'LB')]
# [('CHEM3954114', '50', 'KG')]
4
Tim Biegeleisen 17 Янв 2022 в 09:33
1
Это тоже отличный ответ, большое спасибо, однако ответ nikeros идеально соответствует тому, что я спрашивал. Я просто не могу понять, как использовать функцию/пакет. Не могли бы вы предоставить какую-нибудь документацию или руководство?
 – 
Ahmed
17 Янв 2022 в 09:37
2
В сети есть несколько хороших учебных сайтов по пакету Python re. Кроме того, прочитайте некоторые канонические вопросы и ответы на Stack Overflow. Оба хорошие места для начала. FWIW, если у вас есть более одного ввода для обработки одновременно, моя версия, вероятно, то, что вам нужно.
 – 
Tim Biegeleisen
17 Янв 2022 в 09:38
1
Еще раз большое спасибо, я проголосовал за комментарий и добавил его в закладки для дальнейшего использования, я очень благодарен, спасибо.
 – 
Ahmed
17 Янв 2022 в 09:41

Учитывая элементы, которые вы указали в своем вопросе, я предполагаю, что в элементе не может быть '(' более одного раза.

Вот функция, которую я написал.

def decontruct(chem):
  name = chem[:chem.index('(')]
  qty = chem[chem.index('(') + 1:-1]
  mag, unit = "", ""
  for char in qty:
      if char.isalpha():
          unit += char
      else:
          mag += char
  return {"name": name, "mag": float(mag), "unit": unit} # If you don't want to convert mag into float then just use int(mag) instead of float(mag).

Применение:

x = ['CHEM1(5.4GL)', 'CH3M2(55LB)', 'CHEM3954114(50KG)']

for chem in x:
  d = decontruct(chem)
  print(d["name"], d["mag"], d["unit"])
1
Circuit Planet 17 Янв 2022 в 10:02

Используйте re и создайте список словарей

import re

x = ['CHEM1(5GL)', 'CH3M2(55LB)','CHEM3954114(50KG)']
keys =['a', 'b', 'c']
y = []
for s in x:
    vals = re.sub(r'(.*?)\((\d*)(.*?)\)', r'\1 \2 \3', s).split()
    y.append(dict(zip(keys, vals)))

[print("a: %s\nb: %s\nc: %s\n" % (i['a'], i['b'], i['c'])) for i in y]

Дает

a: CHEM1
b: 5
c: GL

a: CH3M2
b: 55
c: LB

a: CHEM3954114
b: 50
c: KG
0
Vladimir Botka 17 Янв 2022 в 10:03