正则表达式 - 匹配多个群组

时间:2015-11-17 11:32:18

标签: c# regex

我试图从以下示例字符串中提取(全部在一行中):

First Note Type[br]03/11/2015          12:51:24            USR123[br]Now is the time for all good men to come to the aid of their country[br]Second Note Type[br]03/11/2015          16:26:03            USR456[br]The quick brown fox jumped over the lazy dog.

2场比赛每组5个,例如:

匹配1

  • G1 - > ' First Note Type'
  • G2 - > ' 03 /二千零十五​​分之十一'
  • G3 - > ' 12:51:24'
  • G4 - > ' USR123'
  • G5 - > '现在是所有好人来帮助他们国家的时候了[br]'

匹配2

  • G1 - > '第二笔记类型'
  • G2 - > ' 03 /二千零十五​​分之十一'
  • G3 - > ' 16:26:03'
  • G4 - > ' USR456'
  • G5 - > '快速的棕色狐狸跳过懒狗。'

到目前为止,我只使用以下表达式设法匹配前4组:

([a-zA-Z\s]+)\\[br\\\]([0-9]+/[0-9]+/[0-9]+)\s+([0-9]+:[0-9]+:[0-9]+)\s+([a-zA-Z0-9]+)\\[br\\]

无法获得第五个(G5)群组,我尝试添加(.+),但只会导致一个匹配,而不是n

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

使用(.+)时,它会尽可能多地匹配换行符以外的1个或多个符号(因此,它会耗尽所有内容直到行尾)。

您可以将其与以下正则表达式匹配:

([a-zA-Z\s]+)\[br]([0-9]+/[0-9]+/[0-9]+)\s+([0-9]+:[0-9]+:[0-9]+)\s+([a-zA-Z0-9]+)\[br]([^[]*(?:\[(?!br])[^[]*)*(?:\[br])?)

请参阅regex demo

我添加了([^[]*(?:\[(?!br])[^[]*)*(?:\[br])?)部分。它匹配[br]以外的所有内容。更详细的细分:

  • [^[]* - 匹配[
  • 以外的0个或多个字符
  • (?:\[(?!br])[^[]*)* - 匹配0个或更多个序列...
    • \[(?!br]) - 文字[未跟br]
    • [^[]* - 除[以外的0个或多个字符。
  • (?:\[br])? - 匹配文字序列[br]
  • 的1或0倍

使用您的字符串作为输入获得的结果:

enter image description here