如果它呈现java,正则表达式找到一个单词

时间:2015-04-09 13:07:14

标签: java regex

我有一个包含结构化数据的文件,但它可能有一个缺少的字段,如下所示

Name:xxxxx,Age:20,Gender:Male
Name:yyyy,Gender:male
Name:zzzx,Age:26,Gender:Male

我想要一个正则表达式来获取姓名,年龄和性别的值。到目前为止,我已经使用了

Name:(.*),Age:(.*),Gender:(.*)

如果所有三个字段都存在,则会带来值,但它对丢失的文件不起作用。任何人都可以告诉我如何实现这个

3 个答案:

答案 0 :(得分:1)

您使用的是Java的Pattern和Matcher类吗?如果是这样,你可以像这样做一个正则表达式。

(Name:(.*),)?(Age:(.*),)?(Gender:(.*),)?

这会弄乱你的分组,但应该给出正确的结果。这有效的原因是因为当你使用'?'时它找到它所寻找的零个或一个实例。所以这对你正在做的事情来说是完美的。

答案 1 :(得分:1)

,:上拆分以获取所有键值对。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SOPlayground {

    public static void main(String[] args) throws Exception {
        String input = "Name:xxxxx,Age:20,Gender:Male\n"
                + "Name:yyyy,Gender:male\n"
                + "Name:zzzx,Age:26,Gender:Male";

        List<Map<String, String>> entries = new ArrayList<>();
        for (String line : input.split("\n")) {
            Map<String, String> entry = new HashMap<>();
            for (String field : line.split(",")) {
                String[] parts = field.split(":");
                String key = parts[0];
                String value = parts[1];
                entry.put(key, value);
            }
            entries.add(entry);
        }
        System.out.println(entries);
    }

}

输出:

[{Gender=Male, Age=20, Name=xxxxx}, {Gender=male, Name=yyyy}, {Gender=Male, Age=26, Name=zzzx}]

答案 2 :(得分:1)

试试类似:

String str = "Name:xxxxx,Age:20,Gender:Male";
String regex = "Name:(.*?[^,]),Age:(.*?[^,]),Gender:(.*)"; 
...
Output:
xxxxx
20
Male