I was a little bothered by the lack of processing of \r in the csv matcher - I think it's ok, since the \n at the end of the \r\n sequence is all that we care about (the code to actually extract rows needs to be more careful). But a comment explaining that might be useful.