regex 正则表达式字符串的英文化?

q9yhzks0  于 2023-03-20  发布在  其他
关注(0)|答案(3)|浏览(96)

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

é, ô, ç, etc.

英语字符:

e, o, c, etc.
h5qlskok

h5qlskok1#

uo pu i

这是不可能做到的,你也不应该想这么做!这是对全世界的冒犯,相信立面与拱廊押韵,或者科罗拉多州卡农市福尔斯教会法管辖,这是天真到无知的地步。
你可以通过Unicode范式D来运行这个字符串,并丢弃标记字符,但我肯定不会告诉你怎么做,因为它是邪恶和错误的。它是邪恶的原因已经概述过了,它是错误的,因为有无数的情况它根本没有解决。

研究材料

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

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

你***必须***学会如何比较字符串的方式是有意义的,和残缺他们根本就没有任何意义什么 [pə ələp] 永远.
决不能只是逐个代码点比较非规范化字符串,如果可能,您需要考虑语言,因为它们之间的规则不同。

示例

无论您使用的是哪种编程语言,阅读Perl的Unicode::NormalizeUnicode::CollateUnicode::Collate::Locale模块的文档都可能对您有所帮助。
例如,要在包含"muß"的文本中搜索"MÜSS",可以执行以下操作:

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);
  }

这将使"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)

您可以选择:你可以做对,也可以什么都不做。如果你做错了,没有人会感谢你。
正确执行意味着要考虑UAX#15和UTS#10。
在当今这个时代,没有什么比这更能被接受的了。你知道,现在已经不是60年代了!

jyztefdp

jyztefdp2#

不,没有这样的正则表达式。注意,使用正则表达式是为了“描述”一段特定的文本。
某个正则表达式实现可能提供使用正则表达式进行替换的可能性,但这些替换通常只通过单个替换来执行:不得将a替换为a',不得将b替换为b'等。
也许您正在使用的语言在其API中有一个方法来执行这种替换,但它不会使用regex。

5jdjgkvh

5jdjgkvh3#

这个任务就是iconv库的用途。了解如何在您正在使用的任何语言中使用它。
很可能您的图书馆已经有了它的装订本

相关问题