正则表达式 - 匹配组中的下一场比赛

时间:2015-10-20 14:55:13

标签: c# regex

我想要使用正则表达式分割以下字符串:

Connect: Unable to open connection to server. HOST:(servernamex) SERVICE:(cnxadaB0) DATABASEINFO:(3 255 C:\DATABASENAME.DAT) ERROR:RemoteConnect: SocketError(10061) The CONNX Listener process (CNXRUN##_MAIN) is not running on the system.

我到目前为止提出的正则表达式如下:

(\s|^)([A-Z]\w\w+:(?!(\s[A-Z]\w\w+:)))

当我运行正则表达式时,我得到以下结果:

MATCH 1 
1. '' 
2. 'Connect:' 
MATCH 2 
1. ' ' 
2. 'HOST:'
MATCH 3 
1. ' ' 
2. 'SERVICE:'
MATCH 4 
1. ' ' 
2. 'DATABASEINFO:' 
MATCH 5 
1. ' ' 
2. 'ERROR:'

我想使用正则表达式将其拆分为我分组数据,如下所示:

MATCH 1 
1. '' 
2. 'Connect:' 
3. 'Unable to open connection to server.'
MATCH 2 
1. ' ' 
2. 'HOST:'
3. '(servernamex)' 
MATCH 3 
1. ' ' 
2. 'SERVICE:'
3. '(cnxadaB0)' 
MATCH 4 
1. ' ' 
2. 'DATABASEINFO:' 
3. '(3 255 C:\DATABASENAME.DAT)' 
MATCH 5 
1. ' ' 
2. 'ERROR:'
3. 'RemoteConnect: SocketError(10061) The CONNX Listener process (CNXRUN##_MAIN) is not running on the system.

我玩过的样本: regex101 demo

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

(^|\s)([A-Z]\w+:)\s*(.*?(?=\s[A-Z]\w+:|$))

RegEx Demo

如果你想避免第一个被捕获的空格或空字符串组,那么使用lookbehind断言:

(?<=^|\s)([A-Z]\w+:)\s*(.*?(?=\s[A-Z]\w+:|$))

答案 1 :(得分:0)

([^: ]+?:(?![^(]*\)))\s*(.*?)(?=\s+[^: ]*:(?![^(]*\))|$)

您可以使用此功能。请参阅演示。而不是split执行match并捕获groups

https://regex101.com/r/gT6vU5/3