【问题标题】:RegEx: Grabbing value between quotation marks from string正则表达式:从字符串的引号之间获取值
【发布时间】:2014-11-05 09:08:00
【问题描述】:

这与:RegEx: Grabbing values between quotation marks有关。

如果有这样的字符串:

HYPERLINK "hyperlink_funda.docx" \l "Sales"

链接上给出的正则表达式

(["'])(?:(?=(\\?))\2.)*?\1

给我

[" HYPERLINK ", " \l ", " "]

什么正则表达式将返回用引号括起来的值(特别是在\" 标记之间)?

["hyperlink_funda.docx", "Sales"]

使用Java,String.split(String regex)方式。

【问题讨论】:

  • 那不行。给予 - “ HYPERLINK "hyperlink_funda.docx" \l "Sales" " 完整。
  • 我向你保证,它正在工作。 Take a look here.
  • 你使用什么语言?
  • 这通常可以工作,但我正在使用 Java 并使用 String.split(regex) 方式。具体来说,String[] parts = " HYPERLINK \"hyperlink_funda.docx\" \\l \"Sales\" ".split("\\\\\".*?\\\\\"");.跨度>

标签: java regex string matching capturing-group


【解决方案1】:

您不应该将它与.split() 方法一起使用。而是使用 Pattern 和捕获组:

{
    Pattern pattern = Pattern.compile("([\"'])((?:(?=(\\\\?))\\3.)*?)\\1");
    Matcher matcher = pattern.matcher(" HYPERLINK \"hyperlink_funda.docx\" \\l \"Sales\" ");

    while (matcher.find())
        System.out.println(matcher.group(2));
}

输出:

hyperlink_funda.docx
销售

这是regex demo,这是online code demo

【讨论】:

    【解决方案2】:

    我认为您误解了String.split 方法的性质。它的工作是通过匹配分隔符的特征,而不是通过匹配要返回的字符串的特征,找到一种拆分字符串的方法。

    您应该使用PatternMatcher

    String txt = " HYPERLINK \"hyperlink_funda.docx\" \\l \"Sales\" ";
    
    String re = "\"([^\"]*)\"";
    
    Pattern p = Pattern.compile(re);
    Matcher m = p.matcher(txt);
    ArrayList<String> matches = new ArrayList<String>();
    while (m.find()) {
        String match = m.group(1);
        matches.add(match);
    }
    System.out.println(matches);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2011-07-17
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多