我正在使用正则表达式 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/