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

Gon*_*iao 1 regex haskell

我想在Haskell中使用正则表达式将latex命令替换为字符

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

> putStrLn $ 
    subRegex (mkRegex "(\\mbfA)([^[:alnum:]])") "\\mbfA \\mbfAlpha" "o\\2"
Run Code Online (Sandbox Code Playgroud)

得到这个结果:

\o \mbfAlpha
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ber*_*rgi 5

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

但是,在你的Haskell代码中,你需要使用反斜杠转义反斜杠,当你需要在正则表达式中使用双反斜杠时,你需要在字符串中使用四个反斜杠.这应该是这样的:

makeRegex "(\\\\mbfA)([^[:alnum:]])" :: Regex
Run Code Online (Sandbox Code Playgroud)