在两个引号之间获取一个字符串

时间:2011-10-28 18:20:47

标签: java regex

如何在value =?

之后的两个引号之间得到一个值

所以,value="hi my name is bob" />
会回来:hi my name is bob
value="Ouch! "that hurt" lol..." />
将返回:Ouch! "that hurt" lol...

我知道value=" TEXT_HERE " />将永远发生,我希望它内部的字符串。是的,最后/>之前总有一个空格。这是我正在解析的HTML代码,除了这个字段之外,我已经得到了正确解析的所有内容。

编辑让我澄清一下。我不能真正使用任何辅助工具,因为我使用Webdriver来解析页面,在我获得源代码后,我将HTML抛出到字符串中然后我尝试从所有数据中解析“value”标记。 /> 因此,正则表达式代码必须能够通过各种编码进行操作,并获得价值领域。我需要每个值字段的数据。

6 个答案:

答案 0 :(得分:6)

您可以使用String.indexOf()搜索"的第一个匹配项。保存第一个匹配项索引,使用String.lastIndexOf()获取最后一个匹配项索引并调用String.substring()以获取所需的子字符串。

答案 1 :(得分:3)

如果您使用Java解析HTML,我建议您使用像jsoup这样的Java库来简化您的工作。

答案 2 :(得分:1)

我建议使用XPath来完成它的设计工作。这是一个可以让你走上正轨的例子:


import java.io.ByteArrayInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class Test {
  public static void main(String[] args) throws Exception {
    String s = ""
      + "<?xml version=\"1.0\"?>"
      + "<root>"
      + "  <a value=\"hello\" />"
      + "  <b value=\'hello\' />"
      + "  <c value=\"hello &quot;bob&quot;\" />"
      + "</root>";
    ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes());

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document d = builder.parse(bis);
    XPathFactory xpf = XPathFactory.newInstance();
    XPath xpath = xpf.newXPath();
    XPathExpression xpe = xpath.compile("//@value");
    NodeList nl = (NodeList)xpe.evaluate(d, XPathConstants.NODESET);

    for (int i = 0; i < nl.getLength(); i++) {
      System.out.println(nl.item(i).getNodeValue());
    }
  }
}

然后输出:


hello
hello
hello "bob"

答案 3 :(得分:0)

您可以使用正则表达式来获取引号之间的值,或者您可以使用包含整个语句/句子/值的字符串。

例如,您可以使用String.replaceAll方法将所有'''(引号)替换为''(空格)。

答案 4 :(得分:0)

一般来说:

echo 'value="hi my name is bob" />' | perl -nle 'm{value="\s*([^"]*)} and print $1'

答案 5 :(得分:0)

以下是一些适合您的Java代码和正则表达式模式:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

Pattern pattern = Pattern.compile("[\\d\\w\\s'\"]+\\z");
Matcher matcher = pattern.matcher("value=\"hi my name is bob\"");

while (matcher.find()) {
    System.out.print("found:'"+matcher.group()+"'");
}

...打印

发现:'“我的名字是bob”'

您需要使用\。

来转义字符串中的引号