我试图在表达式的开头查找美元符号。
我希望它是"^\\$"
,因为我必须转义美元符号以避免将其视为行尾。但是,我看到以下结果:
import Text.Regex.PCRE
let x = "$100.00" :: Text
let m = show x =~ "$" :: Bool
print m
let m = show x =~ "^$" :: Bool
print m
let m = show x =~ "^\\$" :: Bool
print m
屈服:
True
False
False
我想念什么?
如果我尝试转义更少或更多的“ \”字符:
let m = show x =~ "^\$" :: Bool
print m
let m = show x =~ "^\\\$" :: Bool
print m
两种产品
Parse error (line 13, column 30): lexical error in string/character literal at character '$'
let y = "1$00.00" :: Text
let m = show y =~ "$" :: Bool
print m
True
这就是为什么我想要^\\$
而不仅仅是$
当我不使用show
let m = x =~ "^\\$" :: Bool
print m
生产
<interactive>:1:9: error:
• No instance for (RegexLike Regex Text) arising from a use of ‘=~’
• In the expression: x =~ "^\\$" :: Bool
In an equation for ‘m’: m = x =~ "^\\$" :: Bool
答案 0 :(得分:3)
您想使用unpack
将Text
转换为String
,而不是show
。 show x
添加引号,以防止您的正则表达式匹配。
答案 1 :(得分:0)
Data.Text.unpack
是有效的功能。
import Data.Text as T
let x = "$100.00" :: Text
print $ (T.unpack x)
print $ IHaskellPrelude.length (T.unpack x)
let m = ((T.unpack x) =~ "^\\$" :: Bool)
print m
生产
"$100.00"
7
True