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