// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r"(?im)^(?<rank>(?:(?:[ \t]|^)[a-z]+)+?)(?!(?:[ \t][a-z.]+){4,}$)[ \t](?<first>[a-z]+)[ \t](?:(?<middle>[a-z.]+)[ \t])?(?<last>[a-z]+)$").unwrap();
let string = "High Sheriff John Caldwell. Cook
Deputy Sheriff John A. Gooch
Marshall Robert Forsyth
Constable Darius Quimby
#Exception (when you have First, Last and more than 1 word for the rank):
Deputy Sheriff John Gooch
#In the last example you have to define a list of rank prefixes which mean that there's another word definitely going after it and capture it greedy or with possessive quantifier. E.g.: Deputy,High.";
// result will be an iterator over tuples containing the start and end indices for each match in the string
let result = regex.captures_iter(string);
for mat in result {
println!("{:?}", mat);
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Rust, please visit: https://docs.rs/regex/latest/regex/