PowerShellで、ひらがな、カタカナ、半角カナ交じりの文字列に対して以下の変換を実施する。
- すべてひらがなにする
- 濁音、半濁音を清音にする("ば"や"ぱ"→"は")
- 小さな文字(拗音、促音文字)を大きな文字にする。
$str = "ヴぁーちゃルグルーぷ"
# 清音化とひらがな化
# 一度半角カナにして濁点、半濁点を置換削除するバッドノウハウを使用
[reflection.assembly]::LoadWithPartialName("Microsoft.VisualBasic") | Out-Null
$str = [Microsoft.VisualBasic.Strings]::StrConv($str, [Microsoft.VisualBasic.VbStrConv]::Katakana)
$str = [Microsoft.VisualBasic.Strings]::StrConv($str, [Microsoft.VisualBasic.VbStrConv]::Narrow)
$str = $str -replace "[゙゚]", ""
$str = [Microsoft.VisualBasic.Strings]::StrConv($str, [Microsoft.VisualBasic.VbStrConv]::Wide)
$str = [Microsoft.VisualBasic.Strings]::StrConv($str, [Microsoft.VisualBasic.VbStrConv]::Hiragana)
# 小さい文字(拗音、促音)を大きな文字に
# ここは単純に一つずつ置換
$from = "ぁぃぅぇぉゃゅょっ"
$to = "あいうえおやゆよつ"
0 .. ($from.Length - 1) | %{ $str = $str -replace $from.Chars($_), $to.Chars($_) }
return $str
参考
strConv
関数を使う方法と、引数などについては以下を参考にしました。
清音化を、一度半角カナにして濁点と半濁点を置換削除で行うのは、昔ながらのバッドノウハウ。最後の拗音、促音の置換をループでやるのも、昔ながらの普通の文字列処理技(だと思う)。