匹配字母数字字符,包括拉丁语 unicode



我有一个匹配 ASCII 字母数字字符的工作正则表达式:

 string pattern = "^[a-zA-Z0-9]+$";
 Match match = Regex.Match(input, pattern);
 if (match.Success)
 {
   ...

我想扩展它以应用相同的概念,但包括所有拉丁字符(例如 å、Ø 等(。

我读过关于 unicode 脚本的信息。我试过这个:

 string pattern = "^[{Latin}0-9]+$";

但它与我预期的模式不匹配。如何使用 unicode 脚本或其他方法匹配拉丁语 unicode?

.

NET 正则表达式引擎不支持 Unicode 脚本,但 Unicode 块支持。话虽如此,您可以使用以下正则表达式匹配所有拉丁字符:

^[p{IsBasicLatin}p{IsLatin-1Supplement}p{IsLatinExtended-A}p{IsLatinExtended-B}0-9]+$
  • p{IsBasicLatin} : U+0000–U+007F
  • p{IsLatin-1Supplement} : U+0080–U+00FF
  • p{IsLatinExtended-A} : U+0100–U+017F
  • p{IsLatinExtended-B} : U+0180–U+024F

或者干脆用^[u0000-u024F0-9]+$.

@AnthonyFaull提到您可能还需要考虑匹配p{IsLatinExtendedAdditional} 这是 U+1E00-U+1EFF 的命名块,包含 256 个附加字符:

[ắẮằẰẵẴẳẲấẤầẦẫẪẩẨảẢạ ẠặẶậẬḁḀ ẚ ḃḂḅḄḇḆ ḉḈ ḋḊḑḐḍḌḓḒḏḎ ẟ ếẾềỀễỄểỂẽẼḝḜḗḖḕḔẻẺẹẸ ệỆḙḘḛḚ ḟḞ ḡḠ ḧḦḣḢḩḨḥḤḫḪẖ ḯḮỉỈịỊḭḬ ḱḰḳḲḵḴ ḷḶḹḸḽḼḻḺ ỻỺ ḿḾṁṀṃṂ ṅṄṇṆṋṊṉṈ ốỐồỒỗỖổỔṍṌṏṎṓṒṑṐỏỎớỚ ờỜỡỠởỞợỢọỌộỘ ṕṔṗṖ ṙṘṛṚṝṜṟṞ ṥṤṧṦṡṠṣṢṩṨẛ ẞ ẜ ẝ ẗṫṪṭṬṱṰṯṮ ṹṸṻṺủỦứỨừỪữỮửỬựỰụỤṳṲ ṷṶṵṴ ṽṼṿṾ ỽỼ ẃẂẁẀẘẅẄẇẆẉẈ ẍẌẋẊ ỳỲẙỹỸẏẎỷỶỵỴ ỿỾ ẑẐẓẒẕẔ]

使用 ^[p{L}s]+$ 匹配任何 unicode 字符

或者^[wu00c0-u017e]$匹配从 00c0 到 017e 的任何字母加 unicode 字符(使用字符映射查找您需要的 unicode 字符范围(

正则表达式101上的示例

我将使用Unicode脚本。

正如维基百科(https://en.wikipedia.org/wiki/Latin_script_in_Unicode(所述,我将使用拉丁语-1补充(00C0-00FF(,拉丁语扩展-A(0100-017F(,拉丁语扩展-B(0180-024F(和ASCII字母数字字符的模式。

string pattern = "^[a-zA-Z0-9\u00C0–\u024F]+$";

最新更新