Как вывести 2-мерный список в Haskell? [Дубликат]

/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i

Это соответствует:

 - (+351) 282 43 50 50
 - 90191919908
 - 555-8909
 - 001 6867684
 - 001 6867684x1
 - 1 (234) 567-8901
 - 1-234-567-8901 x1234
 - 1-234-567-8901 ext1234
 - 1-234 567.89/01 ext.1234
 - 1(234)5678901x1234
 - (123)8575973
 - (0055)(123)8575973

В $ n он сохраняет:

  1. Индикатор страны
  2. Номер телефона
  3. Расширение

Вы можете проверить его на https://www.regexpal.com/?fam=99127

1
задан jubobs 17 March 2015 в 01:15
поделиться

2 ответа

Чтобы напечатать строку, как она есть, без экранирования специальных символов, используйте:

putStr string

или

putStrLn string

, если вы хотите добавить новую строку в конце. В вашем случае вы, вероятно, ищете

putStr (displayFilm (....))

Почему это необходимо? В GHCi, если вы оцениваете выражение s, результат будет напечатан, как если бы он выполнялся print s (если у него нет типа IO something - забудьте об этом специальном случае). Если e является строкой, print выводит все специальные символы и выводит результат. Это связано с тем, что print предназначен для вывода строки, синтаксис которой соответствует выражению Haskell. Для чисел это обычное десятичное обозначение. Для строк мы получаем кавычки и экранированные символы.

4
ответ дан chi 21 August 2018 в 04:10
поделиться
  • 1
    Есть ли способ, которым я могу использовать & quot;\n & quot ;? – kmil 17 March 2015 в 01:10
  • 2
    @kmil Вы можете использовать его как это: putStr "aa\nbb". – chi 17 March 2015 в 01:13
  • 3
    Я уверен, что вы имели в виду с экранированием специальных символов, а не без. – user 7 March 2016 в 17:14
  • 4
    @gragas На самом деле, putStr ничего не скрывает. Например. если string содержит строку новой строки, она печатается как строка новой строки, а не как символ ` followed by n . Instead, print`, избегает специальных символов. – chi 7 March 2016 в 19:11

Когда вы вводите выражение в GHC, он отображает его с помощью print. Вызов print в строке показывает его содержимое, но не оценивает escape-последовательности:

> print "line1\nline"
"line1\nline2"

Обратите внимание на кавычки.

Чтобы на самом деле распечатать строку, используйте putStr или putStrLn (последний добавит новую строку).

> putStr "line1\nline2"
line1
line2
2
ответ дан ApproachingDarknessFish 21 August 2018 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: