регулярное выражение находит только 1 совпадение при разбиении на все заглавные буквы - PullRequest
0 голосов
/ 28 апреля 2020

Я использую контейнер регулярных выражений и пытаюсь разбить строку на заглавные буквы. Выражение regex, которое я использую, это ([A-Z][a-z]+), которое на regex101 подтверждается, что оно работает как положено.

Моя функция проста:

pub fn format_str_with_regex(str_to_format: String) {
    let re = regex::Regex::new(r"([A-Z][a-z]+)").expect("Unable to create regex pattern");
    let fields = re.captures(&str_to_format).expect("Unable to get capture groups");

    println!("{:?}", fields);
}

I ' я передал в различных строках, таких как «Hello», «HelloWorld», «MyNameIsMrSmith», и вместо нескольких захватов я просто возвращаю всю строку обратно мне.

Например, если я использую println!("{:?}", fields.get(1)); Я получаю «Hello», «HelloWorld», «MyNameIsMrSmith», и если я использую println!("{:?}", fields.get(2));, я просто получаю None.

1 Ответ

1 голос
/ 28 апреля 2020

captures дает вам снимки с самого левого совпадения.

Похоже, вы заинтересованы во всех находках, соответствующих вашему регулярному выражению. Возможно find_iter - это то, что вы ищете:

pub fn format_str_with_regex(str_to_format: String) {
    let re = regex::Regex::new(r"([A-Z][a-z]+)").expect("Unable to create regex pattern");
    for field in re.find_iter(&str_to_format) {
        println!("{:?}: {}", field, field.as_str());    
    }
}

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3cb2375fd2640f96b27e60e56b995065

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