Haskell正则表达式

时间:2015-03-03 11:20:26

标签: regex haskell

我的文本文件包含以下行:

[aex-ESE14 -14] this is a line

我有:

:mod +Text.Regex.Posix

如何仅过滤具有上述模式的行并将内容提取为两个字符串:

(String, String) = ("aex-ESE14 -14","this is a line")

1 个答案:

答案 0 :(得分:1)

这是一种可行的方法:

Prelude> :mod +Text.Regex.Posix
Prelude Text.Regex.Posix> let res = "[aex-ESE14 -14] this is a line" =~ "(\\[[^][]+])[[:blank:]]+(.+)" :: [[String]]
Prelude Text.Regex.Posix> res
[["[aex-ESE14 -14] this is a line","[aex-ESE14 -14]","this is a line"]]
Prelude Text.Regex.Posix> res!!0!!1
"[aex-ESE14 -14]"
Prelude Text.Regex.Posix> res!!0!!2
"this is a line"

重点是匹配并捕获您需要返回的模式部分,其余部分可以匹配。为确保[...]位于字符串的开头,您可以在模式的开头添加^

模式详情

  • (\\[[^][]+]) - 第1组:[后跟一个或多个除[]以外的字符,然后是]
  • [[:blank:]]+ - 一个或多个水平空格字符
  • (.+) - 一个或多个字符。

如果某些模式可能出现0次或更多次,请将相应的+替换为*量词。