Haskell regex, раздел должен быть заключен в круглые скобки, таким образом - PullRequest
1 голос
/ 16 апреля 2019

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

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

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

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 Ответ

0 голосов
/ 15 мая 2019

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