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

时间:2017-04-10 15:46:18

标签: c# regex

我有一个匹配ASCII字母数字字符的正则函数:

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

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

我读过unicode scripts。我试过这个:

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

但它与我期望的模式不匹配。如何使用unicode脚本或替代方法匹配拉丁unicode?

3 个答案:

答案 0 :(得分:3)

.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},这是包含256个附加字符的U + 1E00-U + 1EFF的命名块:

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

答案 1 :(得分:1)

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

^[\w\u00c0-\u017e]$匹配任何字母加上从00c0到017e的unicode字符(使用charmap查找所需的unicode字符范围)

Sample on regex101

答案 2 :(得分:1)

我将使用unicode脚本。

如维基百科(https://en.wikipedia.org/wiki/Latin_script_in_Unicode)所述,我将使用Latin-1 Supplement(00C0-00FF),Latin Extended-A(0100-017F),Latin Extended-B(0180-024F)和您的模式用于ASCII字母数字字符。

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