Решите трехбуквенную строку в способе регулярного выражения
Мне нужна помощь, чтобы решить с помощью регулярных выражений. The language of all strings defined over Σ = {X, Y, Z} with Y as the third letter and Z being the second last letter
,
3 ответа
Если вам разрешено использовать пересечение (которое сохраняет рациональность), я бы сказал это просто ΣΣYΣ* & Σ*ZΣ
, Если вы передадите это Vcsn для нормализации, вы получите:
In [1]: import vcsn
In [2]: vcsn.B.expression('([XYZ]{2}Y[XYZ]*)&([XYZ]*Z[XYZ])').derived_term().expression()
Out[2]: (X+Y+Z)ZY+(X+Y+Z)(X+Y+Z)Y(X+Y+Z)*Z(X+Y+Z)
Призыв к derived_term
состоит в том, чтобы построить автомат из выражения, и последний вызов expression
это извлечь рациональное выражение из этого автомата.
Поскольку задано Σ = {X, Y, Z}, вам нужно построить язык всех строк, определенных над ним, где Y - третья буква, а Z - вторая последняя буква.
"ΣΣYΣ * ZΣ | ΣZY" будет обязательным регулярным выражением.
Σ * имеет все строки, которые являются 0 или более конкатенациями строк из Σ.
Как вы можете видеть, здесь Y является третьим элементом, а Z помещается во вторую последнюю позицию. И, Σ может быть заменен любым из элементов X, Y или Z.
Я думаю, что регулярное выражение должно быть таким....
(x+y+z)zy(x+y+z)^*