#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