java正则表达式:获取嵌套重复组
如何在重复组中匹配重复组
例如,在日志文件中获取所有有效记录:
---:
TS : 150602000006S
EC1: 02429.523
EC2: 05604.110
---
---:
TS : 150603000006S
---:
TS : 150603000006S
EP1: 3333.523
---
如以下匹配:
[
[
['TS ', '150602000006S'],
['EC1', '02429.523'],
['EC2', '05604.110']
],
[
['TS', '150603000006S'],
['EP1', '3333.523']
]
]
可以使用(See on regex101)检索单个记录属性:
([A-Z0-9 ]{3,3}): ([0-9SW]+ )?([0-9\.SW]{3,})\n
但是,当将正则表达式放在记录组(like seen here)中时,属性组会以重复的方式停止匹配
这是如何正确完成的
# 1 楼答案
为了保持它的可维护性,我会尝试将其拆分为几个正则表达式
首先,需要进行一些基本检查,以确保数据的格式符合预期。我会计算以下每种表达出现的次数。如果他们不匹配,那么干脆放弃*
一旦你知道这些是相等的,你可能想把整个字符串和一个模式匹配起来,把它分成几个部分,例如
这表示一个文本
-:
,后跟一个换行符,后跟尽可能少的文本(*?
是惰性的),后跟一个换行符或字符串的结尾。您需要使用ssingle line标志来运行此操作这将为您的示例字符串提供三个匹配项。然后,您可以在每个结果匹配上运行您的模式
*放弃似乎是一条简单的出路,但很难对格式错误的数据做出任何准确的猜测。考虑到您之前的示例,如果我们想将这些数据标准化,我们有两个选择,都是作为注释添加的:
如果我们猜错了会有什么后果?在出现错误的情况下继续下去有什么好处吗?这完全取决于你的申请