繁体   English   中英

正则表达式查找是否存在Java的单词

[英]Regex to find a word if it presents java

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

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

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

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

如果所有三个字段都存在,则会带来值,但不适用于缺少的文件。 谁能告诉我如何实现这一目标

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

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

这会使您的分组有些混乱,但应该给出正确的结果。 起作用的原因是因为当您使用“?”时 它找到所查找内容的零个或一个实例。 因此,这非常适合您的工作。

在拆分,:让所有键值对。

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}]

试试类似的东西:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM