[英]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.