如何在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”标记。 /> 因此,正则表达式代码必须能够通过各种编码进行操作,并获得价值领域。我需要每个值字段的数据。
答案 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 "bob"\" />"
+ "</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”'
您需要使用\。
来转义字符串中的引号