haskell正则表达式替换:模式包含反斜杠

时间:2014-02-02 14:52:12

标签: regex haskell

我想在Haskell

中使用regex将latex命令替换为字符

我尝试在ghci中进行以下正则表达式替换:

> putStrLn $ 
    subRegex (mkRegex "(\\mbfA)([^[:alnum:]])") "\\mbfA \\mbfAlpha" "o\\2"

得到这个结果:

\o \mbfAlpha

这不是我想要的,我想要的是o \mbfAlpha

在Python中,我可以得到我想要的东西:

In [7]: print(re.sub(r"(\\mbfA)(\W)", "o\\2", "\\mbfA \\mbfAlpha"))
o \mbfAlpha

在Haskell中有什么办法可以用包含反斜杠的正则表达式替换字符串吗?

1 个答案:

答案 0 :(得分:5)

在你的python中,你有一个原始字符串r"(\\mbfA)(\W)" - 这意味着反斜杠只是一个反斜杠,而不是转义字符。

然而,在你的Haskell代码中,你需要使用反斜杠转义反斜杠,当你需要在正则表达式中使用双反斜杠时,你需要在字符串中使用四个反斜杠。因此,这应该有效:

makeRegex "(\\\\mbfA)([^[:alnum:]])" :: Regex