Как преобразовать регулярное выражение в список

Я имею строку регулярного выражения только с | и ():

(Привет, Привет) Меня зовут (Bob | Robert)

И я хотел бы иметь полный список строк, которые соответствуют регулярному выражению:

Привет, меня зовут Боб Привет, меня зовут Роберт Привет, меня зовут Боб Привет, меня зовут Роберт

Это инструмент (librairy), который уже делает это?

Моя первая проблема состоит в том, чтобы разделить строку regexp на массив массива, например:

[['Hello','Hi'],'my name is' ,['Bob','Robert']]

Всего 3 ответа


Попробуйте exrex, подумайте, что вам следует работать

Простой скрипт

import exrex
print(list(exrex.generate('(Hello|Hi) my name is (Bob|Robert)')))

Выход

→ python new_test.py
['Hello my name is Bob', 'Hello my name is Robert', 'Hi my name is Bob', 'Hi my 
name is Robert']

https://github.com/asciimoo/exrex


Сделайте это с регулярным выражением :-)

re.split(r"((.+?|.+?))",s)
Out: ['', '(Hello|Hi)', ' my name is ', '(Bob|Robert)', '']
# and for each string in the list:
re.split(r"((.+?)|(.+?))",'(Hello|Hi)')
Out: ['', 'Hello', 'Hi', '']

Вы можете попробовать ниже решения, здесь я не импортировал ни одного модуля. Единственные используемые функции - strip, split and replace

input_string = "(Hello|Hi) my name is (Bob|Robert)"
split_string = (input_string.replace("("," ").replace(")"," ")).split("  ")
print ([i.strip().split("|") for i in split_string])

#Output --> [['Hello', 'Hi'], ['my name is'], ['Bob', 'Robert']]

Надеюсь, это поможет!


Если вам нужно окончательное решение для вашего запроса, используйте ниже код:

from itertools import product
input_string = "(Hello|Hi) my name is (Bob|Robert)"
split_string = (input_string.replace("("," ").replace(")"," ")).split("  ")
jj = [i.strip().split("|") for i in split_string]
kk = list(product(*jj))
print ([" ".join(i) for i in kk])
#output --> ['Hello my name is Bob', 'Hello my name is Robert', 'Hi my name is Bob', 'Hi my name is Robert']

Вышеупомянутый код также будет работать для: input_string = "(Hello | Hi | Hey) my (name | naam) (Bob | Robert)"


Есть идеи?

10000