rustで、正規表現とUnicode正規化を使って和暦を西暦にサクッと変換するソースコード。
use regex::Regex;
use unicode_normalization::UnicodeNormalization;
fn main(){
let r = Regex::new(r"(?P<nengo>昭和|平成|令和)(?P<nen>[0-9]+|[0-9]+|元)年").unwrap();
let wareki = "令和5年";
let cap = r.captures(wareki).unwrap();
let nengo = cap.name("nengo").unwrap().as_str();
let toshi = cap.name("nen").unwrap().as_str();
let nen = if toshi=="元" {
1
}else{
toshi.nfkc().to_string().parse::<u32>().unwrap()
};
let seireki = match nengo{
"昭和" => nen + 1925,
"平成" => nen + 1988,
"令和" => nen + 2018,
_=>0
};
println!("{}{}年、西暦:{}年",nengo,nen,seireki);
}
なんかもうちょっとスマートにできそうだけど
ひとまずこんな感じかな。
julia版はこちら
コメント