我目前正在处理遵循以下格式的字符串:
4,Matt, Hopkins,MI,5.75,Wood,33.0,2.25,2.1,2016-09-02,74.25,69.3,8.254125,151.804125
我正在尝试使用正则表达式将所有单词和整数提取为单独的字符串(如MI,Wood,33.0等),但有一个例外:我想将第一个逗号后面的部分视为单个字符串,直到我们得到全部大写 - 所以正则表达式会提取这个:
[4] [Matt, Hopkins] [MI] [5.75] [Wood] and so forth.
请注意,名称部分根本没有逗号,即[Hopkins]或多于一个,即[Matt,Jr。,Hopkins]。全部大写字段描述了一个状态,因此始终遵循相同的格式。
我不能很好地理解正则表达式 - 到目前为止我只想出
[a-zA-Z(?:\d*\.)?\d+-]+
可以处理所有字段,但名称除外。
答案 0 :(得分:3)
你可以做一些事情(我的Java有点生疏,而且我是通过手机发布的):
String[] values = data.split(",(?! )");
Java允许在正则表达式上分割字符串,这个简单的样本使用负向前瞻,以确保您只分裂CSV逗号而不是名称中的逗号。
答案 1 :(得分:1)
使用正则表达式可能会让你在这里变得更难。
这看起来像CSV数据。您可以使用CSV库将其正确解析为单个字段(*):
String[] fields = YourCsvLibrary.parseRow(string); // or string.split(","), maybe.
然后根据需要重新组合字段。例如,您的正则表达式的逻辑可以通过以下代码表示:
String[] output = Arrays.copyOfRange(fields, 1, fields.length);
output[0] = fields[0];
output[1] = fields[1] + "," + fields[2];
(*)String.split(",")
可能有效,前提是字段数据不包含引号,逗号,换行符等。