以下是我的数据集中的三个示例行:
| | | | featureB >= 16104.33 : 18873.52 (1/0)
| featureA >= 17980.32
featureC = ABC BLAH BLAH blA'H $blah 4/ blah blah
我正在努力想出一个可以捕获以下内容的模式匹配器:
我提出了以下模式,但无法捕获特征值:
Pattern.compile("(?:\\| )*(.*?)(>?=|<)((?!:).)*(?::?)(.*?)(?:\\(.*\\))?")
所以基本上我的目标是group(1)
包含要素名称,group(2)
包含关系,group(3)
包含要素值,group(4)
包含结果如果存在。
目前group(1)
,group(2),
和group(4)
会产生我所期待的内容,但group(3)
永远不会被捕获,并且始终为空。
我将不胜感激任何帮助/建议。
答案 0 :(得分:3)
根据您精心设计的要求,我想出了这个正则表达式来捕获所有4组(第4组是可选的):
^[ |]*(\w+)\s*(>?=|<)\s*([^:]+)(?:\s*:\s*([^()]*))?
Java模式:
Pattern p = Patttern.compile("^[ |]*(\\w+)\\s*(>?=|<)\\s*([^:]+)(?:\\s*:\\s*([^(]+))?.*$");
答案 1 :(得分:2)
第5组是可选的括号内容。
^[ |]*(\w+)\s*(>?=|<)\s*([^:]+?)(?:\s*:\s*([^\(]+))?(\(.*)?$
答案 2 :(得分:1)
这似乎适用于您的所有输入:
argv[]
或者,在Java中
envp[]
(\s*\|\s*)*(\w+)\s*(<=?|>=?|=)([^:]+)(:(.*)$)?
|--------| |---| |---------||-----||-|--|-|
1 2 3 4 5 6
是功能名称,Pattern.compile("(\\s*\\|\\s*)*(\\w+)\\s*(<=?|>=?|=)([^:]+)(:(.*)$)?");
是运算符,group(2)
是值,group(3)
是结果。
这是测试正则表达式的绝佳资源: