У меня есть строка, которая выглядит так:
data = ABSIFHIEHFINE -2938 NODFNJN {[somedate]} oiejfoen
Мне нужно тянуть {[somedate]}
только с включенным {[]}.
Я пытался сделать data.substring(0, data.indexOf(']}'))
, чтобы удалить конец строки, но он также удаляет символы, которые мне нужно сохранить.
I need to pull {[somedate]} only with {[]} included.
def data = 'ABSIFHIEHFINE -2938 NODFNJN {[somedate]} oiejfoen'
// you could do error checking on these to ensure
// >= 0 and end > start and handle that however
// is appropriate for your requirements...
def start = data.indexOf '{['
def end = data.indexOf ']}'
def result = data[start..(end+1)]
assert result == '{[somedate]}'
Вы можете сделать это с помощью поиска по регулярным выражениям:
data = "ABSIFHIEHFINE -2938 NODFNJN {[somedate]} oiejfoen"
def matcher = data =~ /\{\[.+?\]\}/
if ( matcher ) {
echo matcher[0]
}
else {
echo "no match"
}
Выход:
{[somedate]}
Пояснения:
=~
— оператор поиска. Это создает java.util.regex.Matcher
.\{\[.+?\]\}
\{\[
- литералы {
и [
, которые необходимо экранировать, потому что они имеют особое значение в RegEx..+?
- любой символ, хотя бы один, как можно меньше (для поддержки поиска нескольких подстрок, заключенных в {[]}
)\]\}
- литералы ]
и }
, которые необходимо экранировать, потому что они имеют особое значение в RegEx.echo
на println
).