Регулярное выражение: запишите шаблон, который нужно разделить запятой

#python #regex

Вопрос:

Мне нужно создать маркер, который разделит строку запятыми.

Это можно сделать с помощью split, используя

 re.split(', ', str)
 

Но мне нужно использовать компиляцию.
Я пытался

 text = "5g, dynamic vision sensor (dvs), 3-d reconstruction, neuromorphic engineering, neural networks, humanoid robots, neuromorphics, closed loop systems, field programmable gate arrays, spiking motor controller, neuromorphic implementation, icub, relation neural network"
pattern = re.compile(r'[a-z0-9()-] ')
re.findall(pattern, text)
 

И выход есть

 ['5g', 'dynamic', 'vision', 'sensor', '(dvs)', '3-d', 'reconstruction', 'neuromorphic', 'engineering', 'neural', 'networks', 'humanoid', 'robots', 'neuromorphics', 'closed', 'loop', 'systems', 'field', 'programmable', 'gate', 'arrays', 'spiking', 'motor', 'controller', 'neuromorphic', 'implementation', 'icub', 'relation', 'neural', 'network']
 

Желаемый результат —

 ['5g', 'dynamic vision sensor (dvs)', '3-d reconstruction', 'neuromorphic engineering', 'neural networks', 'humanoid robots', 'neuromorphics', 'closed loop systems', 'field programmable gate arrays', 'spiking motor controller', 'neuromorphic implementation', 'icub', 'relation neural network']
 

Комментарии:

1. Почему нет pattern = re.compile(r', *'); re.split(pattern, text) ?

2. Для этого вам не нужно использовать регулярные выражения. Просто используйте split() метод.

Ответ №1:

Как сказала @mama, для этого вам не нужно использовать регулярное выражение, но если вы особенно хотите использовать re.compile, вы можете сделать это со следующим кодом:

 text = "5g, dynamic vision sensor (dvs), 3-d reconstruction, neuromorphic engineering, neural networks, humanoid robots, neuromorphics, closed loop systems, field programmable gate arrays, spiking motor controller, neuromorphic implementation, icub, relation neural network"
pattern = re.compile(r'([sa-z0-9()-] )')
L=re.findall(pattern, text)
L=[l.lstrip(" ") for l in L]
 

введите описание изображения здесь

Ответ №2:

Попробуйте этот шаблон: [a-z0-9() -] (?=,|$)

Код:

 text = "5g, dynamic vision sensor (dvs), 3-d reconstruction, neuromorphic engineering, neural networks, humanoid robots, neuromorphics, closed loop systems, field programmable gate arrays, spiking motor controller, neuromorphic implementation, icub, relation neural network"
pattern = re.compile(r'[a-z0-9() -] (?=,|$)')
print([x.strip() for x in re.findall(pattern, text)])
 

Выход:

 ['5g', 'dynamic vision sensor (dvs)', '3-d reconstruction', 'neuromorphic engineering', 'neural networks', 'humanoid robots', 'neuromorphics', 'closed loop systems', 'field programmable gate arrays', 'spiking motor controller', 'neuromorphic implementation', 'icub', 'relation neural network']
 

Ответ №3:

Не используйте для этого регулярные выражения. Просто используйте встроенную split() функцию python

 text = "5g, dynamic vision sensor (dvs), 3-d reconstruction, neuromorphic engineering, neural networks, humanoid robots, neuromorphics, closed loop systems, field programmable gate arrays, spiking motor controller, neuromorphic implementation, icub, relation neural network"

print(text.split(', '))