2014-02-02 3 views
1

Я хочу, чтобы заменить команду латекса в символ с помощью регулярных выражений в HaskellHaskell Regex заменить: шаблон содержит обратный слэш

Я пытался сделать следующее регулярное выражение замены в 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, что я могу сделать замену строки с регулярным выражением, содержащим обратную косую черту?

ответ

5

В вашем python у вас есть необработанная строка: r"(\\mbfA)(\W)" - это означает, что обратная косая черта - это просто обратная косая черта, а не символ возврата.

В коде Haskell, однако, вам нужно будет избежать обратных косых черт с помощью обратных косых черт, когда вам понадобится двойная обратная косая черта в регулярном выражении, вам понадобится четыре обратных слэша в строке. Это должно сработать поэтому:

makeRegex "(\\\\mbfA)([^[:alnum:]])" :: Regex 
Смежные вопросы