用等效替换特殊字符

Jor*_*ata 3 string matlab replace diacritics

如何用等效字符替换以下特殊字符?

元音:AEIOUaeiou分别为ÁÉÍÓÚáéíóú.并且字母Ñ由N.

表达方式:

str = regexprep(str,'[^a-zA-Z]','');
Run Code Online (Sandbox Code Playgroud)

将删除非字母表中的所有字符,但如何替换上面显示的等效字符?

谢谢

Amr*_*mro 5

你可以编写一系列正则表达式,如:

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

等等其他重音字符......(对于大/小的情况)

警告:即使是拉丁字母的小子集,也有很多变化


一个更简单的例子:

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

str = 'Ámró';
[tf,loc] = ismember(str, chars_old);
str(tf) = chars_new( loc(tf) )
Run Code Online (Sandbox Code Playgroud)

之前的字符串:

>> str
str =
Ámró
Run Code Online (Sandbox Code Playgroud)

后:

>> str
str =
Amro
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)

如果您不想要该功能,请发出.toLower()