Получить строку между двумя кавычками - PullRequest
3 голосов
/ 28 октября 2011

Как бы получить значение между двумя кавычками после значения =?

Итак, 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 ]

6 голосов
/ 28 октября 2011

Вы можете использовать String.indexOf() для поиска первого вхождения ". Сохраните первый индекс вхождения, получите последний индекс вхождения, используя String.lastIndexOf(), и вызовите String.substring (), чтобы получить нужную подстроку.

3 голосов
/ 28 октября 2011

Если вы анализируете HTML с помощью Java, я предлагаю вам использовать библиотеку Java, например jsoup , чтобы упростить вашу работу.

1 голос
/ 28 октября 2011

Я рекомендую использовать 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"
0 голосов
/ 28 октября 2011

Вот код 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()+"'");
}

печатает ...

найдено: '"привет, меня зовут Боб"'

Вам нужно экранировать кавычки в строках с помощью \.

0 голосов
/ 28 октября 2011

В целом:

echo 'value="hi my name is bob" />' | perl -nle 'm{value="\s*([^"]*)} and print $1'
0 голосов
/ 28 октября 2011

Вы можете использовать регулярное выражение, чтобы получить значение между кавычками, или вы можете работать со строкой, содержащей весь оператор / предложение / значение.

Например, вы можете использовать метод String.replaceAll, чтобы заменить все '"'(кавычки) с' '(пробелы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...