Regex - Извлечь подстроку из заданной строки

У меня есть строка здесь This is a string: AAA123456789.

Итак, идея здесь состоит в том, чтобы извлечь строку AAA123456789 с помощью regex.

Я включаю это с помощью X-Path.

Примечание. Если есть сообщение для этого, любезно подведите меня к нему.

Я думаю, по праву, я должен substring(myNode, [^AAA\d+{9}]),

Я не уверен, что часть регулярного выражения.

Идея состоит в том, чтобы извлечь строку, когда она встречается с "AAA", и только номера, но только 9 последовательных номеров.

Ответ 1

Решение Pure XPath:

substring-after('This is a string: AAA123456789', ': ')

производит

AAA123456789

решения XPath 2.0:

tokenize('This is a string: AAA123456789 but not an double',
              ' '
              )[starts-with(., 'AAA')]

или

tokenize('This is a string: AAA123456789 but not an double',
              ' '
              )[matches(., 'AAA\d+')]

или

replace('This is a string: AAA123456789 but not an double',
              '^.*(A+\d+).*$',
              '$1'
              )

Ответ 2

Хорошо, после ссылки на ответы и комментарии замечательных людей здесь, я обобщил свои выводы с этим решением, которое я выбрал. Здесь,

concat("AAA", substring(substring-after(., "AAA"), 1, 9)).

Итак, во-первых, подстрока - после строки с "AAA" в качестве первого аргумента, с длиной от 1 до 9... ничего больше, игнорируется. Тогда, поскольку я использовал AAA в качестве ссылки, это не будет отображаться, таким образом, конкатенация AAA перед значением. Таким образом, это означает, что я получу первые 9 цифр после AAA, а затем concat AAA спереди с момента статических данных.

Это позволит корректно обрабатывать данные независимо от того, какие другие вклады существуют.

Но мне нравится регулярное выражение @Dimitre. Замените деталь. Токенизация не так, как если бы в качестве аргумента не было места. Замена с помощью регулярного выражения, это тоже замечательно. Спасибо.

А также благодаря вам, ребята, там, чтобы...

Ответ 3

Во-первых, я уверен, что вы не имеете в виду [^ ... ]. Это определяет "отрицательный класс символов", т.е. Ваше текущее регулярное выражение говорит: "Дайте мне один символ, который не является одним из следующих: A0123456789{}". Вы, вероятно, имели в виду, "AAA(\d{9})". Теперь, согласно этот удобный веб-сайт, XPath поддерживает группы захвата, а также обратные ссылки, поэтому возьмите ваш выбор:

"AAA(\d{9})"

И извлечение $1, первой группы захвата, или:

"(?<=AAA)\d{9}"

И возьмем все совпадение ($0).

Ответ 4

Можете ли вы попробовать это:

а {3} (\ d {9})