Решите трехбуквенную строку в способе регулярного выражения

Мне нужна помощь, чтобы решить с помощью регулярных выражений. 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)^*
Другие вопросы по тегам