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})