Регулярное выражение Haskell, раздел должен быть заключен в круглые скобки таким образом

#regex #haskell

#регулярное выражение #haskell

Вопрос:

Я работаю с этим текстом, где я вижу пример:

 > gsub [re|d |] "x" "1 and 2 and 3" :: Text -- 7
"x and x and x"
 

Аналогично, я хотел бы использовать gsub для замены / non/ digits на nulls , но то, что казалось довольно простым переводом, не удалось:

 Prelude Text.Regex.Posix> gsub [re|D |] "" "$57.72" :: Float

<interactive>:14:7: error:
    A section must be enclosed in parentheses thus: (re | D  |)
 

Затем я замечаю, что даже исходный пример не работает для меня с той же ошибкой:

 Prelude Text.Regex.Posix Data.Text> gsub [re|d |] "x" "1 and 2 and 3" :: Text

<interactive>:17:7: error:
    A section must be enclosed in parentheses thus: (re | d  |)
 

Почему интерпретатор говорит мне сделать что-то отличное от того, что работает в этом примере, и как мне заставить работать какую-то замену текста регулярным выражением?

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

1. Вы используете QuasiQuotes расширение?

2. Похоже, анализатор думает, что вы используете | оператор без правильного операнда.

Ответ №1:

Если вы включите расширение QuasiQuotes языка, GHC будет анализировать [re|d |] по-другому, поскольку строка d передается квази-кавычку re . Кстати, я не уверен, что у вас правильный импорт, поскольку re квази-цитатник, похоже, исходит из pcre-heavy модуля Text.Regex.PCRE.Heavy .

Таким образом, приведенное ниже должно работать с GHCi:

 Prelude Data.Text> :set -XQuasiQuotes
Prelude Data.Text> import Text.Regex.PCRE.Heavy
Prelude Data.Text Text.Regex.PCRE.Heavy> gsub [re|d |] "x" "1 and 2 and 3" :: Text