【发布时间】:2018-11-21 03:21:41
【问题描述】:
所以,我有一个 .srt 文件,它是一个格式如下的字幕文件:
1
00:00:01,230 --> 00:00:02,360
This is a subtitle
2
00:00:03,124 --> 00:00:04,400
This is another subtitle
我需要稍微修改一下。我需要做的一件事是检查时间戳的完整性,所以我试图在 haskell 中编写一个函数来检查字符串是否是有效的时间戳
data TimeStamp = TimeStamp Int Int Int Int deriving (Eq, Show, Read)
getTimeStamp :: String -> TimeStamp
getTimeStamp a = read a
isNum :: Maybe Int -> Bool
isNum x = isJust x
isTimeStamp :: String -> Bool
isTimeStamp "" = False
isTimeStamp (hour:':':min:':':sec:',':mil:_) = if (isNum numH) && (isNum numM) && (isNum numS) && (isNum numMil) then True else False
where numH = readMaybe [hour] :: Maybe Int
numM = readMaybe [min] :: Maybe Int
numS = readMaybe [sec] :: Maybe Int
numMil = readMaybe [mil] :: Maybe Int
问题是,我的模式匹配不起作用。我不太确定我应该如何对子字符串进行模式匹配...有什么帮助吗?
【问题讨论】:
-
使用 alex+happy,或众多优秀的解析器组合库之一。参见例如this question 讨论了为什么这是基本递归或基本
String-processing 函数的优越方法。我很想将此标记为重复,因为我对这两个问题的回答基本相同,仅在被解析的确切语言上有所不同。
标签: haskell