Регулярные выражения получают третий элемент из строки - PullRequest
0 голосов
/ 10 декабря 2018

Здравствуйте, у меня проблемы с получением третьего элемента строки (F604080)

<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>

Я пробовал использовать это регулярное выражение и варианты, но мне удалось получить F604080.

(?<=\w+_)\w+(?=\<)

(?<=\w+_\w+_)\w+(?=\<)

....

Любая помощь будет оценена.Спасибо.

Ответы [ 4 ]

0 голосов
/ 10 декабря 2018

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

.*_(\w+)

и захватите группу 1.

Java-коды,

public static void main(String[] args) {
    String s = "<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>";
    Pattern p = Pattern.compile(".*_(\\w+)");
    Matcher m = p.matcher(s);

    if (m.find()) {
        System.out.println(m.group(1));
    } else {
        System.out.println("Didn't match");
    }
}

Печатает это так, как вы хотели.

F604080
0 голосов
/ 10 декабря 2018

Оба ваших регулярных выражения, кажется, соответствуют заданной строке.

В любом случае вы можете быть немного более конкретным с этим:

^(?:<\w+>)(?:\w+)_(?:\w+)_(\w+)(?:<\/\w+>)$

Убедитесь, что вводстрока, о которой вы думаете, и после этого никакой дополнительный текст не приводится.

0 голосов
/ 10 декабря 2018
  1. Используя regex, вы можете использовать что-то вроде >\w+_\w+_(\w+)<\/

    String str = "<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>";
    String code = null;
    Matcher m = Pattern.compile(">\\w+_\\w+_(\\w+)</").matcher(str);
    if (m.find()) {
        code = m.group(1);
    }
    
  2. Просто используйте substring() операция

    String code = str.substring(str.lastIndexOf('_') + 1, str.lastIndexOf('<'));
    
  3. Если позже вы проанализируете XML с большим количеством элементов, вы можете использовать что-то вроде Java DOM Parser XML, но здесь это не лучший вариант, так как у вас есть только один элемент

0 голосов
/ 10 декабря 2018

Можете ли вы просто проанализировать строку, используя "_" в качестве разделителя, и взять третий элемент?

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