RexEx从多记录CSV字符串中捕获记录

时间:2017-02-21 04:51:41

标签: regex

我有一个多记录csv文件(无CRLF),因此在导入时它是一个单独的字符串。 导入文件后,我试图获取一组记录。

  • 记录中有固定数量的字段。
  • 第一个领域 每条记录都有一个已知值'Foo'

我希望正则表达式在Foo上匹配然后捕获不是Foo的所有内容

我假设这会给我一个记录的匹配集合,然后我可以处理。

我已经和RegexBuddy在SO上的各个帖子中尝试“消极的向前看”,但我无法弄明白。

我想我根本不理解“除了foo之外捕获任何东西”的构造

1 个答案:

答案 0 :(得分:1)

这个正则表达式匹配Foo以及下一个Foo的所有内容,但不包括:

(Foo|Bar)(.*?)(?=Foo|Bar|$)

请参阅live demo

“非Foo”部分将在第1组中。

这里的关键是:

  • .*?是一个不情愿的量词 - 它仍然在匹配时尽可能地消耗 little - 需要避免在输入中消耗掉所有内容直到最后一个Foo
  • (?=Foo|$)预览Foo 输入结束,因此最后一条记录不是后跟{{ 1}},也匹配。

向前看不要消耗输入,所以下一个Foo会留在输入中,为下一场比赛做好准备。