захватывать текст, включая теги из строки, а затем переупорядочивать теги с текстом - PullRequest
1 голос
/ 17 июня 2010

У меня есть следующий текст:

abcabcabcabc<2007-01-12><name1><2007-01-12>abcabcabcabc<name2><2007-01-11>abcabcabcabc<name3><2007-02-12>abcabcabcabc<name4>abcabcabcabc<2007-03-12><name5><date>abcabcabcabc<name6>

Мне нужно использовать регулярные выражения для очистки текста выше:

Основное правило извлечения:

<2007-01-12>abcabcabcabc<name2>

У меня нет проблем с извлечением этого шаблона.Моя проблема в том, что в этом тексте у меня неправильно сформированные последовательности: если текст начинается не с даты, а заканчивается именем, моя добыча не удалась.Например, приведенный выше текст может иметь несколько неправильно сформированных последовательностей, таких как:

abcabcabcabc<2007-01-12><name1>

Должно быть:

<2007-01-12>abcabcabcabc<name1>

Isможно получить регулярное выражение, которое очистило бы вышеупомянутое, до извлечения моего последовательного образца.Короче говоря, мне нужно найти все неправильно сформированные шаблоны, а затем взять тег даты и поместить его перед ним, как указано в примере выше.

Спасибо.

1 Ответ

1 голос
/ 17 июня 2010

Вам нужно что-то подобное?

public class Extract {
    public static void main(String[] args) {
        String text =
            "abcabcabcabc<2007-01-12><name1>" +
            "<2007-01-12>abcabcabcxxx<name2>" +
            "<2007-01-11>abcabcabcyyy<name3>" +
            "<2007-02-12>abcabcabczzz<name4>" +
            "abcabcabc123<2007-03-12><name5>" +
            "<date>abcabcabc456<name6>";
        System.out.println(
            text.replaceAll(
                "(text)<(text)>(text)<(text)>"
                    .replace("text", "[^<]*"),
                "$1$3 - $2 - $4\n"
            )
        );
    }
}

Это печатает:

abcabcabcabc - 2007-01-12 - name1
abcabcabcxxx - 2007-01-12 - name2
abcabcabcyyy - 2007-01-11 - name3
abcabcabczzz - 2007-02-12 - name4
abcabcabc123 - 2007-03-12 - name5
abcabcabc456 - date - name6

По сути, есть 3 части:

  • Голыйтекст захватывается \1 и \3 - один из них должен быть пустой строкой
  • Дата: \2
  • Имя \4

Вы, конечно, можете использовать Matcher и извлекать отдельные group тоже.

Ссылки

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