【问题标题】:Getting specific words from a sentence从句子中获取特定单词
【发布时间】:2016-03-15 10:05:53
【问题描述】:

我有一个看起来像这样的句子 {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());
            }

这就是我得到的结果:=Zeus。 我想这是模式的错,但我不知道要改变什么......有什么想法吗? placeinfo 等于看起来像 {Name=Something, Address=Something 21} 的东西,它是我从数据存储区获取的实体属性。

【问题讨论】:

  • 为此使用 json 解析器。但问题是每个实体都应该用双引号
  • matcher.group() ------> matcher.group(1) 并在[A-Za-z0-9-_] 中添加空格。

标签: java regex string


【解决方案1】:

您的正则表达式和代码似乎非常接近预期结果;

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

【讨论】:

  • 这很有帮助,但仍然没有得到第二个词。也许我应该使用 json 解析器......但无论如何谢谢!
  • 只复制粘贴下面的代码。输出是宙斯 \n 东西 21
  • 现在我复制粘贴了你的代码,但问题是我有多行,这就是我使用 String placeInfo=entity.getProperties().toString(); 的原因线=地点信息;当我这样做时它不起作用..我不知道为什么
  • 如果您针对您的问题提供可运行的代码,我们可以为您提供更多帮助。在您的代码 line=placeInfo 没有意义您可以直接使用 placeInfo 。如果要将 placeInfo 附加到 line,请使用 line += placeInfo 并在循环结束后使用 pattern.matcher。
  • 我认为您必须循环调试并检查 placeInfo 值。我真的不明白什么是行不通的
【解决方案2】:

我不确定这是正确的方法吗? entity.getProperties() 的返回类型是什么?如果它是 Map、Properties 或 JSON 对象,您可能最好使用适当的 getter,而不是在 toString() 上使用正则表达式。

例如

Map<String, String> properties = entity.getProperties();
String name = properties.get("Name");
String address = properties.get("Address");

【讨论】:

    【解决方案3】:
    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);
    

    【讨论】:

    • 为什么投反对票?如果是因为应该使用 JSON 库,请再看一下格式(它不是有效的 JSON)
    • 我认为downvotes所有者必须回复:)但我认为由于模式“{Name=(.+), Address=(.+)}”是如此有限而不是一般的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多