替换 haskell 中的反斜杠
Replacing backslash in haskell
您好,我正在尝试删除子字符串 "\r"
,方法是在以下函数中将其替换为空字符串:
clean :: String -> String
clean ('\':'r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
但是当我 运行 它在测试输入上时:
main = do
print (clean "test line\r\nnew test")
它不起作用,只是输出与输入字符串相同的字符串。现在奇怪的是,如果我用任何其他字符替换反斜杠,例如 ':'
它工作得很好:
clean :: String -> String
clean (':':'r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
main = do
print (clean "test line:r\nnew test")
按预期输出 "test line\nnew test"
。我怀疑我没有正确转义双反斜杠。例如代码:
main = do
print '\'
输出 '\'
而不是 '\'
,但根据我的阅读, 应该 是逃避它的正确方法。我只是不知道我做错了什么,我错过了什么?
\r
是一个字符。当你这样处理它时它会起作用:
clean :: String -> String
clean ('\r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
只有当您想将实际的 \
放入字符串文字时,才需要转义反斜杠。
"\r"
是一个带有一个字符的字符串,反斜杠用来表示一个carriage return,就像双引号("…"
) 也不是字符串的 content 的一部分。
您可以通过以下方式过滤掉回车 return:
clean :: String -> String
clean = filter <b>('\r' /=)</b>
您好,我正在尝试删除子字符串 "\r"
,方法是在以下函数中将其替换为空字符串:
clean :: String -> String
clean ('\':'r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
但是当我 运行 它在测试输入上时:
main = do
print (clean "test line\r\nnew test")
它不起作用,只是输出与输入字符串相同的字符串。现在奇怪的是,如果我用任何其他字符替换反斜杠,例如 ':'
它工作得很好:
clean :: String -> String
clean (':':'r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
main = do
print (clean "test line:r\nnew test")
按预期输出 "test line\nnew test"
。我怀疑我没有正确转义双反斜杠。例如代码:
main = do
print '\'
输出 '\'
而不是 '\'
,但根据我的阅读, 应该 是逃避它的正确方法。我只是不知道我做错了什么,我错过了什么?
\r
是一个字符。当你这样处理它时它会起作用:
clean :: String -> String
clean ('\r':xs) = clean xs
clean (x:xs) = x : clean xs
clean "" = ""
只有当您想将实际的 \
放入字符串文字时,才需要转义反斜杠。
"\r"
是一个带有一个字符的字符串,反斜杠用来表示一个carriage return,就像双引号("…"
) 也不是字符串的 content 的一部分。
您可以通过以下方式过滤掉回车 return:
clean :: String -> String
clean = filter <b>('\r' /=)</b>