Regex 正则表达式:通过换行符捕获组

Regex 正则表达式:通过换行符捕获组,regex,Regex,我想做一个正则表达式搜索。假设以下列表(注意换行): 因此,我想我应该首先使用\n(换行符)捕获州,然后使用以下所有位置及其地址和电话号码。这是我最后一次工作迭代: (\n{3}(.*)(?:\n{2}(.*)\n{1}(.*)\n{1}(.*))) 这里的美景只捕获所有状态和每个状态之后的第一个位置,因此我认为“在非捕获组的末尾添加一个+应该获取其余位置”。像这样: (\n{3}(.*)(?:\n{2}(.*)\n{1}(.*)\n{1}(.*))+) 谎言。没有。它只是坏了 我做错了吗?

我想做一个正则表达式搜索。假设以下列表(注意换行):

因此,我想我应该首先使用\n(换行符)捕获州,然后使用以下所有位置及其地址和电话号码。这是我最后一次工作迭代:

(\n{3}(.*)(?:\n{2}(.*)\n{1}(.*)\n{1}(.*)))
这里的美景只捕获所有状态和每个状态之后的第一个位置,因此我认为“在非捕获组的末尾添加一个
+
应该获取其余位置”。像这样:

(\n{3}(.*)(?:\n{2}(.*)\n{1}(.*)\n{1}(.*))+)
谎言。没有。它只是坏了

我做错了吗?我怎样才能让它捕获各州之间的每个位置

我的目标是将每组聚集在一个数组中,如:

locations[0][0][0] -> 'Big Store' 
locations[0][0][1] -> '5 Washington Blvd W.' 
locations[0][0][2] -> '555-123-456' 
...
locations[1][0][0] -> 'Cool Café' 
locations[1][0][1] -> '23 5th Ave.' 
locations[1][0][2] -> '123-456-789' 
或类似的


谢谢

我不完全确定您想做什么,但我在regexpal中提出了以下建议:

(?:(?:^|\n{3})(.*))(?:(?!\n{3})(?:\n{2})(.*)\n(.*)\n(.*))+
它将匹配具有任意数量的位置块的状态

希望有帮助, 本

更新

我再次更新了正则表达式,以从捕获中包括和排除某些组。分解它,您可以看到它与一行开头或三行新行之后的状态匹配
(?:(?:^|\n{3})(.*)
。接着是两条新行中的一条或多条(但不是3条),然后是3条地址行


但是,您应该注意,虽然此正则表达式匹配不同的位置,但它只捕获最后一个位置(在某些实现中)。您可能需要进行一些多级匹配以捕获所有位置,或者改用@anubhava answer。

这是适用于您的正则表达式:

([^\n]+)?(?:\n{2}([^\n]+)\n([^\n]+)\n([^\n]+))

现场演示:啊,位置、地址和电话是占位符,文本文件有实际的名称、地址和电话。为了清楚起见,我会更新这个问题。对不起,就这样。非常感谢你。如果你能详细介绍一下,那就太棒了!
([^\n]+)?(?:\n{2}([^\n]+)\n([^\n]+)\n([^\n]+))