我是RegEx的新手,正在尝试在Java引擎中使用它。我要解析的一个示例字符串如下:
name:"SFATG";affil:100;aup:1;bu:FALSE name:"SF TAC 1";affil:29.3478;aup:19;bu:FALSE name:"SF TAC 2";affil:22.2222;aup:14;bu:FALSE name:"SF TAC 3";affil:44.4444;aup:0;bu:FALSE name:"SF DISP 4";affil:82.4742;aup:0;bu:FALSE
我希望正则表达式能够仅提取出出现在
:
和;
之间的值。此外,我不想在name
条目中包含引号。然而,在这种非常特殊的情况下,我希望保留bu
条目中出现的空格。但是,我不想让bu
的数据条目中出现name
字段。因此,对于这个字段,我想要的是FALSE
,而不是FALSE name
。我的最终目标是使用这个正则表达式创建一个数组,该数组将包含以下内容:
[0]: SFATG
[1]: 100
[2]: 1
[3]: FALSE
[4]: SF TAC 1
...Etc.
我在考虑为每个值创建一个组,因为这样我就可以通过组合 Pattern
和 Matcher
类轻松创建数组,例如:
String regEx = "Some really fancy RegEx that actually works";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher("Some really really long String that follows the outlined format");
// I'd probably want to use an Object array since my data values vary by type
// I can also create 4 different arrays (one for name, another for affil, etc.),
// Any advice on which approach to take?
Object[] dataValues = new Object[m.groupCount()];
我能提供的正则表达式如下:
我目前能想到的正则表达式如下:
name:"(\w+)";affil:(\d+);aup:(\d+);bu:(\w+\s)
然而,这似乎只适用于前4个数据值,其他的都不行。请问有谁能帮我创建一个适用于我正在处理的数据的正则表达式吗?非常感谢任何对此的帮助!如果有其他方法可以解决这个问题,比如使用不同的数据类型来存储数据(而不是创建对象数组),我也很愿意尝试。关键是要以某种方式从我提到的字符串中获取数据值,并将它们存储起来以备后续处理。
额外问题:我想象中可能会有更适合执行此任务的外部库。是否有人知道适用于此的库?
name:“([^”]+)”;affil:([\d.])+;aup:(\d+);bu:(TRUE|FALSE)?
- teppic+
需要在捕获组内部:即affil:([\d.]+);
。 - teppic