Rust如何将驼峰字符串转换为蛇形命名

“在Rust中如何将驼峰命名的字符串(例如’myVariableName’)转换为蛇形命名(例如’my_variable_name’)?希望能提供一个高效的实现方法,最好能处理各种边界情况,比如连续大写字母或首字母大写的情况。”

2 回复

Rust中可以用正则表达式或手动处理。推荐用regex库:

use regex::Regex;

fn camel_to_snake(s: &str) -> String {
    let re = Regex::new(r"(?P<l>[a-z])(?P<u>[A-Z])").unwrap();
    re.replace_all(s, "${l}_${u}").to_lowercase()
}

手动处理版本:

fn camel_to_snake(s: &str) -> String {
    let mut snake = String::new();
    for (i, c) in s.chars().enumerate() {
        if c.is_uppercase() && i > 0 {
            snake.push('_');
        }
        snake.push(c.to_ascii_lowercase());
    }
    snake
}

调用示例:

fn main() {
    println!("{}", camel_to_snake("helloWorld")); // hello_world
    println!("{}", camel_to_snake("HTTPRequest")); // http_request
}

记得在Cargo.toml添加依赖:

[dependencies]
regex = "1.0"

在 Rust 中,可以使用正则表达式库 regex 来实现驼峰命名(CamelCase)到蛇形命名(snake_case)的转换。以下是具体步骤和代码示例:

  1. 添加依赖:在 Cargo.toml 中添加:

    [dependencies]
    regex = "1"
    
  2. 转换函数

    use regex::Regex;
    
    fn camel_to_snake(input: &str) -> String {
        let re = Regex::new(r"(?P<lower>[a-z])(?P<upper>[A-Z])").unwrap();
        re.replace_all(input, "${lower}_${upper}").to_lowercase()
    }
    

示例使用

fn main() {
    println!("{}", camel_to_snake("helloWorld"));      // 输出 "hello_world"
    println!("{}", camel_to_snake("getHTTPResponse")); // 输出 "get_http_response"
}

说明

  • 正则表达式 r"(?P<lower>[a-z])(?P<upper>[A-Z])" 匹配小写字母后紧跟大写字母的位置,并在两者之间插入下划线。
  • replace_all 方法将匹配的部分替换为 "${lower}_${upper}" 格式。
  • 最后通过 to_lowercase() 确保所有字母转为小写,形成标准的蛇形命名。

这种方法能正确处理大多数驼峰字符串,包括连续大写字母(如 “HTTP” 会被转为 “http”)。

回到顶部