【问题标题】:Regex: extract String from String正则表达式:从字符串中提取字符串
【发布时间】:2014-08-25 22:29:37
【问题描述】:

我需要一个能够从字符串中提取一部分的正则表达式。我通过使用 DOM 解析 XML 文档来获取此字符串。然后我在这个字符串中寻找“§regex”部分,现在我尝试提取它的值。例如“([A-ZÄÖÜ]{1,3}[-][A-Z]{1,2}[1-9][0-9]{0,3})”从其余部分。

问题是,我不知道如何确保提取的部分以“)”结尾 此正则表达式需要适用于给定的每个值。目标是仅将“§regex =”后括号中的值写入字符串。

<UML:TaggedValue tag="description" value=" random Text §regex=([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3}) random text"/>

private List<String> findRegex() {
    List<String> forReturn = new ArrayList<String>();
    for (String str : attDescription) {
        if (str.contains("§regex=")) {
            String s = str.replaceAll(regex);
            forReturn.add(s);
        }
    }
    return forReturn;
}

attDescription 是一个列表,其中包含在解析的 XML 文档中找到的所有属性。

到目前为止,我尝试了这个正则表达式:".*(§regex=)(.*)[)$].*", "$2",但这会切断“)”并且不会删除搜索部分前面的文本。即使有这个http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html 的帮助,我也真的不明白如何获得我需要的东西。

【问题讨论】:

  • 您应该提供一些要匹配的字符串示例和预期结果,而不要使用这种奇怪的 §regex 修饰。代码 sn-p 令人困惑 - 什么是正则表达式?
  • 假设正则表达式没有捕获组、非捕获组、文字括号或空格是非常有限的。所以看起来,除非你能知道它后面的文本的结构,否则我看不出你是怎么做到的。也许正则表达式也可以以=regex[squiggle]结束。然后,您将有一个明确的分隔符来搜索。您是否可以通过这种方式控制输入? (我也会考虑使用比 squiggle 更标准的字符。)
  • replaceAll 需要第二个参数。
  • 试试这个:".*§regex=(\\(.*\\)).*", "$1"
  • 另外,正则表达式中的美元符号 .*(§regex=)(.*)[)$].* 不能工作,因为它期望文本在行尾之后存在。

标签: java regex


【解决方案1】:

如果我用它代替String s = str.replaceAll(regex);,它似乎对我有用(无论如何都有这个例子)

String s = str.replaceAll( ".*§regex=(\\(.*\\)).*", "$1" );

它只是在寻找 §regex= 后面的括号括起来的子字符串。

【讨论】:

    【解决方案2】:

    这似乎有效:

    String s = str.replaceAll(".*§regex=\\((.*)[)].*", "$1");
    

    注意:

    • 转义前括号
    • 字符类中的 $ 是文字 $ - 忽略它,因为您的正则表达式应始终以括号结尾
    • 无需捕获固定文本

    测试代码,注意这适用于正则表达式中/周围的括号:

    String str = "random Text §regex=(([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3})) random text";
    String s = str.replaceAll(".*§regex=\\((.*)[)].*", "$1");
    System.out.println(s);
    

    输出:

    ([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2020-09-15
      • 1970-01-01
      相关资源
      最近更新 更多