正则表达式对字符串字符进行Anglicize?

The*_*978 1 regex unicode special-characters

是否有一个通用的正则表达式替换非英语语言中的所有已知特殊字符:

é, ô, ç, etc.
Run Code Online (Sandbox Code Playgroud)

英文字符:

e, o, c, etc.
Run Code Online (Sandbox Code Playgroud)

tch*_*ist 11

⅁⅁ɹʍpuɐɐIɅƎ

这是不可能做到的,你不应该这样做!它对整个世界都是冒犯性的,而且无知地认为外墙与拱廊押韵,或科罗拉多州的卡农城属于教规法,这是天真的.

您可以通过Unicode Normalization Form D运行字符串并丢弃标记字符,但我肯定不会告诉您如何,因为它是邪恶的和错误的.由于已经概述的原因,它是邪恶的,这是错误的,因为它根本没有涉及到无数的案例.

学习资料

以下是您需要阅读的内容:

  • Unicode规范化表单 - UAX#15本附录描述了Unicode文本的规范化表单.当实现将字符串保持为规范化形式时,可以确保等效字符串具有唯一的二进制表示.本附件还提供了有关Unicode文本规范化的示例,其他规范,以及有关Unicode规范化表单的一致性测试的信息.
  • 应用程序中的规范等价 - UTN#5本文档描述了在规范等效下有效处理文本的方法和格式,如UAX#15 Unicode规范化表格[UAX15]中所定义.
  • Unicode归类算法 - UTS#10此报告是Unicode归类算法(UCA)的规范,详细说明了如何比较两个Unicode字符串,同时保持符合Unicode标准的要求.UCA还提供默认Unicode排序规则元素表(DUCET)作为指定所有Unicode字符的默认排序顺序的数据.

必须学会如何以一种有意义的方式比较字符串,并且对它们进行残害从根本上没有任何意义.  [pəʇələp]  .

您绝不能仅仅按代码点比较非标准化字符串代码,如果可能,您需要考虑语言,因为它们之间的规则不同.

实际例子

无论您使用何种编程语言,它还可以帮助您阅读Perl的Unicode :: Normalize,Unicode :: Collat​​eUnicode :: Collat​​e :: Locale模块的文档.

例如,要搜索其中包含"MÜSS"的文本"muß",您可以执行以下操作:

my $Collator = Unicode::Collate->new( normalization => undef, level => 1 );
                                     # (normalization => undef) is REQUIRED.
  my $str = "Ich muß studieren Perl.";
  my $sub = "MÜSS";
  my $match;
  if (my($pos,$len) = $Collator->index($str, $sub)) {
      $match = substr($str, $pos, $len);
  }
Run Code Online (Sandbox Code Playgroud)

这将投入"muß"$match.

Unicode::Collate::Module有剪裁到这些语言环境支持:

 af                Afrikaans
 ar                Arabic
 az                Azerbaijani (Azeri)
 be                Belarusian
 bg                Bulgarian
 ca                Catalan
 cs                Czech
 cy                Welsh
 da                Danish
 de__phonebook     German (umlaut as 'ae', 'oe', 'ue')
 eo                Esperanto
 es                Spanish
 es__traditional   Spanish ('ch' and 'll' as a grapheme)
 et                Estonian
 fi                Finnish
 fil               Filipino
 fo                Faroese
 fr                French
 ha                Hausa
 haw               Hawaiian
 hr                Croatian
 hu                Hungarian
 hy                Armenian
 ig                Igbo
 is                Icelandic
 ja                Japanese [1]
 kk                Kazakh
 kl                Kalaallisut
 ko                Korean [2]
 lt                Lithuanian
 lv                Latvian
 mk                Macedonian
 mt                Maltese
 nb                Norwegian Bokmal
 nn                Norwegian Nynorsk
 nso               Northern Sotho
 om                Oromo
 pl                Polish
 ro                Romanian
 ru                Russian
 se                Northern Sami
 sk                Slovak
 sl                Slovenian
 sq                Albanian
 sr                Serbian
 sv                Swedish
 sw                Swahili
 tn                Tswana
 to                Tonga
 tr                Turkish
 uk                Ukrainian
 vi                Vietnamese
 wo                Wolof
 yo                Yoruba
 zh                Chinese
 zh__big5han       Chinese (ideographs: big5 order)
 zh__gb2312han     Chinese (ideographs: GB-2312 order)
 zh__pinyin        Chinese (ideographs: pinyin order)
 zh__stroke        Chinese (ideographs: stroke order)
Run Code Online (Sandbox Code Playgroud)

您可以选择:您可以做到这一点,或者您根本不能这样做. 如果你做错了,没有人会感谢你.

正确的做法意味着考虑到UAX#15和UTS#10.

在这个时代,没有什么比这更好的了.你知道,现在不再是20世纪60年代了!

  • "Rene-Levesque"在我的法语数据库中找不到"René-Lévesque"更加邪恶. (4认同)
  • +1.我对你的投票完全取决于你的激情. (4认同)
  • 然后问题在于你的搜索,而你应该问如何执行一个更聪明的搜索字符匹配 (3认同)