我正在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 +|)
为什么解释器告诉我做与本示例中的工作不同的事情,以及如何使用正则表达式进行某种文本替换?
答案 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