4

次の特殊文字を同等のものに置き換えるにはどうすればよいですか?

母音: それぞれ AEIOUaeiou による ÁÉÍÓÓÚáéíóú。そしてNによるÑの文字。

表現:

str = regexprep(str,'[^a-zA-Z]','');

アルファベット以外のすべての文字を削除しますが、上記のような同等のものに置き換えるにはどうすればよいですか?

ありがとう

4

3 に答える 3

5

次のような一連の正規表現を記述できます。

s = regexprep(s,'(?:À|Á|Â|Ã|Ä|Å)','A')
s = regexprep(s,'(?:Ì|Í|Î|Ï)','I')

アクセントのある残りの文字についても同様です...(大文字と小文字の両方)

警告:ラテンアルファベットの小さなサブセットでも非常に多くのバリエーションがあります


より簡単な例:

chars_old = 'ÁÉÍÓÚáéíóú';
chars_new = 'AEIOUaeiou';

str = 'Ámró';
[tf,loc] = ismember(str, chars_old);
str(tf) = chars_new( loc(tf) )

前の文字列:

>> str
str =
Ámró

後:

>> str
str =
Amro
于 2012-10-07T18:40:51.740 に答える
5

次のコードは、すべての分音符号文字 (ÅÄÖ) を正規化します。

function inputWash {
    param(
        [string]$inputString
    )
    [string]$formD = $inputString.Normalize(
            [System.text.NormalizationForm]::FormD
    )
    $stringBuilder = new-object System.Text.StringBuilder
    for ($i = 0; $i -lt $formD.Length; $i++){
        $unicodeCategory = [System.Globalization.CharUnicodeInfo]::GetUnicodeCategory($formD[$i])
        $nonSPacingMark = [System.Globalization.UnicodeCategory]::NonSpacingMark
        if($unicodeCategory -ne $nonSPacingMark){
            $stringBuilder.Append($formD[$i]) | out-null
        }
    }
    $string = $stringBuilder.ToString().Normalize([System.text.NormalizationForm]::FormC)
    return $string.toLower()
}
Write-Host inputWash("ÖÄÅÑÜ");

oaanu

その機能が必要ない場合は .toLower() を省略します

于 2012-11-07T15:38:17.510 に答える