我有一个看起来像这样的句子{Name = Zeus,Address = Something 21}。我想只得到=(Zeus Something 21)之后的单词,但它并不适用于他们两个。那是我的代码
String line="";
Pattern pattern = Pattern.compile("[=]+([A-Za-z0-9-_]+)");
for (Entity entity : pq.asIterable()) {
String placeInfo=entity.getProperties().toString();
line=placeInfo;
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
result.add(matcher.group());
}
这就是我得到的结果:=宙斯。 我想这是模式的错,但我不知道要改变什么......有什么想法吗? placeinfo等于看起来像{Name = Something,Address = Something 21}的东西,它是我从我的数据存储区获取的实体属性。
答案 0 :(得分:0)
您的正则表达式和代码似乎非常接近预期的结果;
String line = "{Name=Zeus, Address=Something 21}";
Pattern pattern = Pattern.compile("[=]+([A-Za-z0-9-_ ]+)"); //added space
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.println(matcher.group(1)); //did you try group(1)
}
答案 1 :(得分:0)
我不确定这是正确的方法吗? entity.getProperties()
的返回类型是什么?如果它是Map或Properties或JSON对象,则最好使用适当的getter,而不是在toString()
上使用正则表达式。
例如
Map<String, String> properties = entity.getProperties();
String name = properties.get("Name");
String address = properties.get("Address");
答案 2 :(得分:-1)
Pattern pattern = Pattern.compile("{Name=(.+), Address=(.+)}");
Matcher matcher = pattern.matcher("{Name=Zeus, Address=Something 21}");
if (!matcher.matches()) throw new RuntimeException();
String name = matcher.group(1);
String address = matcher.group(2);