In working on my .eml parser library, EmlParser, I decided using a regex would be way easier than trying to roll my own parser for handling RFC-0822’s definition for route-addr. But I hadn’t yet used regular expressions in Rust, so voilà:


regex = "1"

use regex::Regex;

fn main() {
    let email = r#""John Smith" <>"#;
    let name_addr_re = Regex::new(r#""(.?+)" <([^>]+)>"#).unwrap();

    match name_addr_re.captures(email) {
        Some(cap) => {
            let name = cap.get(1).unwrap();
            let addr = cap.get(2).unwrap();

            let namestr : &str = name.as_str();

            println!("I found name = {}", name.as_str()); // "John Smith"
            println!("I found addr = {}", addr.as_str()); // ""
        None => println!("doh!?")

The hardest part seems to be figuring out the Rust API (regex docs here) – .captures gets you what’s analogous to Python’s, etc.