3
如何用等同替換下列特殊字符?用等價替換特殊字符
元音:ÁÉÍÓÚáéíóú分別由AEIOUaeiou。和N.
表達字母N:
str = regexprep(str,'[^a-zA-Z]','');
將刪除所有人物非在字母表,但我怎麼跟喜歡的東西等同替換上面顯示?
感謝
如何用等同替換下列特殊字符?用等價替換特殊字符
元音:ÁÉÍÓÚáéíóú分別由AEIOUaeiou。和N.
表達字母N:
str = regexprep(str,'[^a-zA-Z]','');
將刪除所有人物非在字母表,但我怎麼跟喜歡的東西等同替換上面顯示?
感謝
你可以寫一個系列的正則表達式像:
s = regexprep(s,'(?:À|Á|Â|Ã|Ä|Å)','A')
s = regexprep(s,'(?:Ì|Í|Î|Ï)','I')
等了重音符號的其餘部分...(對於上/下例)
警告:即使對於拉丁字母表的小子集,也有這麼多variations
一個更簡單的例子:
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
以下代碼標準化所有音調符號的字符,即AAO。
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
Ommit .toLower()如果你不希望這樣的功能
感謝@Amro,其實我只是用西班牙語集工作,所以特殊字符僅僅是如上圖所示。沒有更簡單的解決方案嗎?像PHP的str_replace,你可以傳遞一個包含等價數組作爲數組參數的數組? –
另一種可能性是使用Perl(這是[可用](http://www.mathworks.com/help/matlab/ref/perl.html)到MATLAB)與[Text :: Unidecode](http:///search.cpan.org/perldoc/Text::Unidecode)。這是一個非常強大的解決方案,它執行有趣的事情,如從Unicode到ASCII的音譯。它已被移植到Python,Java等其他語言。(我過去曾使用Python端口) – Amro
@JorgeZapata:我添加了一個更簡單的示例。 'chars_old'中的每個字符都被替換爲'chars_new'中的相應字符。你可以使用波形符與列表中的相同方式添加N: – Amro