regex - 正则表达式在所有大写字母上分割时仅找到1个匹配项

标签 regex rust

我正在使用正则表达式 crate ,并尝试在大写字母上拆分字符串。我正在使用的正则表达式是([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);
}

我已经传递了各种字符串,例如“Hello”,“HelloWorld”,“MyNameIsMrSmith”,而不是多次捕获,我只是将整个字符串传递回了我。

例如,如果我使用println!("{:?}", fields.get(1));,我会得到“Hello”,“HelloWorld”,“MyNameIsMrSmith”,如果我使用println!("{:?}", fields.get(2));,我只会得到None

最佳答案

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

关于regex - 正则表达式在所有大写字母上分割时仅找到1个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61483218/

相关文章:

c# - 正则表达式 - 如何创建

java - 在正则表达式中使用 Unicode 类别名称时出现 PatternSyntaxException

multithreading - 同步访问 Rust 中的 FFI 调用(通过全局 RWLock?)

rust - Rust 如何限制借用值的范围?

rust - 即使借用不可变的东西也有可能移动吗?

Javascript 正则表达式 : match string beginning with X, 不包括 Y,以 A 或 B 结尾

ruby-on-rails - Rails - 使用 [ 和 ] 从字符串中提取子字符串

java - 如何在 Eclipse 中使用正则表达式查找/替换?

使用rust E0061 : Some(A) is not the same as Some(match . .. =>A)

asynchronous - 如何使用 tokio::join 有条件地运行两个函数之一?