[Haskell-cafe] regular expression sub-expression matching

Bob Ippolito bob at redivi.com
Sat Jan 19 01:52:54 CET 2013

Note that Haskell doesn't convert "\(" to "\\(" like Python does, so the
regex string has been changed. It's not so easy to figure out how to use
this library from the documentation because of all the typeclass trickery.

h> import Text.Regexp.Posix (getAllTextSubmatches, (=~))
h> getAllTextSubmatches ("M(1,2) = 0.1e-3;" =~ "M\\(([0-9]+),([0-9]+)\\) *=
*([0-9.eE-]+);") :: [String]
["M(1,2) = 0.1e-3;","1","2","0.1e-3"]

If it doesn't match, you'll get an empty list. You can join the tail of the
match list together with Data.List.intercalate, and print it out with
putStrLn. The if null case would just return ().

To demonstrate some of the typeclass trickery going on here, you could ask
for the results as an Array with Int indexes of String.

h> import Text.Regexp.Posix (getAllTextSubmatches, (=~))
h> import Data.Array ((!), Array)
h> let matches = getAllTextSubmatches ("M(1,2) = 0.1e-3;" =~
"M\\(([0-9]+),([0-9]+)\\) *= *([0-9.eE-]+);") :: Array Int String
h> matches
array (0,3) [(0,"M(1,2) = 0.1e-3;"),(1,"1"),(2,"2"),(3,"0.1e-3")]
h> map (matches !) [1..3]


On Fri, Jan 18, 2013 at 3:25 PM, Nicolas Bock <nicolasbock at gmail.com> wrote:

> Hello list,
> I was wondering whether there is a way to do what the following python
> code does in haskell:
> import re
> result = re.compile("M\(([0-9]+),([0-9]+)\) *=
> *([0-9.eE-]+);").search("M(1,2) = 0.1e-3;")
> if result:
>   print(result.group(1), result.group(2), result.group(3))
> Basically I would like to pattern match parts of a string and return the
> matches. I have looked at Text.Regex.Posix but (of course I might just not
> have understood the functions in there properly) it seems as if it does not
> provide anything like python's re module.
> Thanks already,
> nick
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130118/08d77152/attachment.htm>

More information about the Haskell-Cafe mailing list