Начало выражения в haskell PCRE - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь найти знак доллара в начале выражения.Я ожидал бы, что это будет "^\\$", так как я должен избегать знака доллара, чтобы его не рассматривали как конец строки.Однако я вижу следующие результаты:

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

Чего мне не хватает?

Обновление 1

ЕслиЯ пытаюсь перейти на меньшее или большее количество символов "\":

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 '$'

Обновление 2

let y = "1$00.00" :: Text
let m = show y =~ "$" :: Bool
print m
True

Именно поэтому я хочу ^\\$ вместо $

Обновление 3

Когда я не использую 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

Ответы [ 2 ]

3 голосов
/ 24 апреля 2019

Вы хотите использовать unpack для преобразования Text в String, а не show. show x добавляет кавычки, которые мешают вашему регулярному выражению совпадать.

0 голосов
/ 25 апреля 2019

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
...