2016-10-20 2 views
2

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

Моя попытка была использовать комбинацию находке и регулярных выражений для просмотра списка:

def date = [ 
    "some string", 
    "some other string 11.11.2000", 
    "another one 20.10.1990" 
].find { title -> 
    title =~ /\d{2}\.\d{2}\.\d{4}/ 
} 

Этот вид работ, оставляя всю строку в date.

Моя цель, однако, состоит в том, чтобы в итоге получилось «11.11.2000» в date; Я предполагаю, что каким-то образом я должен иметь доступ к группе захвата, но как?

+1

Этот вопрос лучше подходит для переполнения стека. Когда вы двигаете его, пожалуйста, для любви ко всему, что тепло и пушисто, * удалите его здесь. * –

+0

@RobertHarvey Кажется, мне не хватает необходимых привилегий. Делай, как хочешь, потому что я доверяю твоему мнению. – npst

ответ

4

Если вы хотите вернуть определенное значение при поиске соответствующего элемента в коллекции (который, как и ваш случай, может быть частью этого элемента), вам необходимо использовать findResult.

Ваш код может выглядеть следующим образом

def date = [ 
    "some string", 
    "some other string 11.11.2000", 
    "another one 20.10.1990" 
].findResult { title -> 
    def res = title =~ /\d{2}\.\d{2}\.\d{4}/ 
    if (res) { 
     return res[0] 
    } 
} 
2

Расширение ответ UnholySheep, вы можете также сделать это:

assert [ 
    "some string", 
    "some other string 11.11.2000", 
    "another one 20.10.1990" 
].findResult { title -> 
    def matcher = title =~ /\d{2}\.\d{2}\.\d{4}/ 
    matcher.find() ? matcher.group() : null 
} == '11.11.2000' 

Для всех матчей, просто использовать findResults вместо findResult, как это:

assert [ 
    "some string", 
    "some other string 11.11.2000", 
    "another one 20.10.1990" 
].findResults { title -> 
    def matcher = title =~ /\d{2}\.\d{2}\.\d{4}/ 
    matcher.find() ? matcher.group() : null 
} == ['11.11.2000', '20.10.1990'] 
Смежные вопросы