【问题标题】:How to grab piece of a string from a bigger string using regex or any method [duplicate]如何使用正则表达式或任何方法从更大的字符串中抓取一段字符串[重复]
【发布时间】:2015-11-04 07:40:41
【问题描述】:

我正在尝试从一个较大的字符串中提取一段字符串。

示例:

String value;
...etc...
value = someMethod();

// Here value equals a large string text
value;

我想提取这个字符串的一个子集,它以“path=”开头,后面的所有内容。

详细示例:

如果值等于:

StartTopic 主题=testParser, multiCopy=false, required=true, all=false, path=/Return/ReturnData/IRSW2

我只想要“path=/Return/ReturnData/IRSW2”等等。

我如何在 Java 中做到这一点?

这是我目前拥有的:

if(value.contains("path")) {
    String regexStr = FileUtils.readFileToString(new File("regex.txt"));
    String escapedRegex = StringEscapeUtils.escapeJava(regexStr);
    System.out.println(value.replaceAll(escapedRegex), "$1");
}

这行不通!再次输出整个字符串

regex.txt 的内容:

/path=([^\,]+)/

【问题讨论】:

    标签: java regex string


    【解决方案1】:

    这应该可以解决问题

    String s = "if value=StartTopic topic=testParser, multiCopy=false, required=true, all=false, path=/Return/ReturnData/IRSW2";
    String regex= "path=[^\\,]*";
    
    Pattern p = Pattern.compile(regex);
    
    Matcher m = p.matcher(s);
    
    if(m.find()) {
        System.out.println(m.group());
    }
    

    【讨论】:

    • 谢谢,这确实成功了
    【解决方案2】:

    你也可以使用:

    String regex = "(?<=path=)[^\\,]*";
    

    insted,所以你只会得到/Return/ReturnData/IRSW2 部分。

    【讨论】:

      【解决方案3】:

      使用函数 indexOf() 查找 'path=' 的索引

      【讨论】:

      • 这仅适用于预期长度的文本字符串
      【解决方案4】:
      String str = "path=/Return/ReturnData/IRSW2";
      System.out.println(str.substring(str.indexOf("path=") + 5));
      

      【讨论】:

      • OP 明确说明“正则表达式或任何方法”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      相关资源
      最近更新 更多