从句子中获取特定单词

时间:2016-03-15 10:05:54

标签: java regex string

我有一个看起来像这样的句子{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}的东西,它是我从我的数据存储区获取的实体属性。

3 个答案:

答案 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);