Улавливание входных сетей verilog с помощью регулярного выражения python (иерархическое разделение на 1.»()», 2.»{}», 3.»,» )

#python #regex #split

Вопрос:

Мне интересно, могу ли я разделить строку python на 3 шага

Сначала с помощью (), во-вторых, с помощью {} и, наконец, с помощью»,»

 string = "module ( a , b, c, d, {e, f, g}, {h,i}, j, k )"  

result = re.split("",string)  
print(result)  
 

Я хочу, чтобы результат этого кода был таким, как показано ниже

 ['a', 'b', 'c', 'd', '{e,f,g}', '{h,i}', 'j', 'k']
 

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

1. Добро пожаловать в Stack Overflow. Не могли бы вы немного прояснить свой вопрос? Какие шаблоны вы пробовали? Шаблон, который вы показываете в примере кода, полностью пуст, что вам мало что даст! Вы уверены, что регулярные выражения-правильный инструмент для этой работы? Регулярные выражения (в их чистых формах) ограничены соответствием регулярному языку, и ваша проблема, похоже, выходит за рамки этого (с возможно вложенными соответствующими скобками).

Ответ №1:

Это делает то, о чем вы просите, если вещи не вложены глубже, чем это.

 import re
pat = r'w |{[^}]*}'
string = "module ( a , b, c, d, {e, f, g}, {h,i}, j, k )"  
result = re.findall(pat, string)
print(list(result))
 

Выход:

 C:tmp>python x.py
['module', 'a', 'b', 'c', 'd', '{e, f, g}', '{h,i}', 'j', 'k']