我想要使用正则表达式分割以下字符串:
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
答案 0 :(得分:1)
您可以使用此正则表达式:
(^|\s)([A-Z]\w+:)\s*(.*?(?=\s[A-Z]\w+:|$))
如果你想避免第一个被捕获的空格或空字符串组,那么使用lookbehind断言:
(?<=^|\s)([A-Z]\w+:)\s*(.*?(?=\s[A-Z]\w+:|$))
答案 1 :(得分:0)
([^: ]+?:(?![^(]*\)))\s*(.*?)(?=\s+[^: ]*:(?![^(]*\))|$)
您可以使用此功能。请参阅演示。而不是split
执行match
并捕获groups
。