Haskell正则表达式,因此必须在圆括号中包含一段,因此

时间:2019-04-16 19:21:39

标签: regex haskell

我正在this text工作,在这里看到示例:

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

类似地,我想使用gsub将/ non /数字替换为空,但是看起来很简单的翻译失败了:

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 :(得分:0)

如果您打开QuasiQuotes语言扩展,GHC将以不同的方式解析[re|\d+|],因为字符串\d+传递到了准引用re。顺便说一句,由于the re quasi-quoter seems to come from pcre-heavy's Text.Regex.PCRE.Heavy module,我不确定您的进口商品是否正确。

因此,以下内容应适用于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