是否有一种简单的方法可以使用str::matches
不区分大小写?
答案 0 :(得分:5)
您始终可以将两个字符串转换为相同的大小写。这适用于某些情况:
let needle = "μτς";
let haystack = "ΜΤΣ";
let needle = needle.to_lowercase();
let haystack = haystack.to_lowercase();
for i in haystack.matches(&needle) {
println!("{:?}", i);
}
在其他情况下,正则表达式为您might do enough case-folding:
extern crate regex;
use regex::RegexBuilder;
fn main() {
let needle = "μτς";
let haystack = "ΜΤΣ";
let needle = RegexBuilder::new(needle)
.case_insensitive(true)
.build()
.expect("Invalid Regex");
for i in needle.find_iter(haystack) {
println!("{:?}", i);
}
}
但请记住,Rust的字符串 UTF-8 。是的,你需要处理所有的UTF-8。这意味着选择大写或小写可能会改变您的结果。同样,更改文本大小requires that you know the language of the text的唯一正确方法;它不是字节的固有属性。是的,你可以拥有包含表情符号和其他令人兴奋的事物的字符串beyond the Basic Multilingual Plane。
另见:
答案 1 :(得分:1)
如果您正在使用the regex crate,则可以使模式不区分大小写:
let re = Regex::new(r"(?i)μτς").unwrap();
let mat = re.find("ΜΤΣ").unwrap();