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

C# 匹配字母数字字符,包括拉丁unicode,c#,regex,C#,Regex,我有一个与ASCII字母数字字符匹配的工作正则表达式: string pattern = "^[a-zA-Z0-9]+$"; Match match = Regex.Match(input, pattern); if (match.Success) { ... string pattern = "^[{Latin}0-9]+$"; [ắẮằẰẵẴẳẲấẤầẦẫẪẩẨảẢạ ẠặẶậẬḁḀ ẚ ḃḂḅḄḇḆ ḉḈ ḋḊḑḐḍḌḓḒḏḎ ẟ ếẾềỀễỄểỂẽẼḝḜḗḖḕḔẻẺẹ

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

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

 string pattern = "^[{Latin}0-9]+$";
我已经读到了。我试过这个:

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

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

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

 string pattern = "^[{Latin}0-9]+$";
^[\w\u00c0-\u017e]$
匹配从00c0到017e的任何字母加unicode字符(使用charmap查找所需的unicode字符范围)

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

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

 string pattern = "^[{Latin}0-9]+$";
^[\w\u00c0-\u017e]$
匹配从00c0到017e的任何字母加unicode字符(使用charmap查找所需的unicode字符范围)

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

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

 string pattern = "^[{Latin}0-9]+$";
^[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{IsLatinExtended-A}\p{IsLatinExtended-B}0-9]+$
  • \p{IsBasicLatin}
    :U+0000–U+007F
  • \p{IsLatin-1supplment}
    :U+0080–U+00FF
  • \p{IsLatinExtended-A}
    :U+0100–U+017F
  • \p{IsLatinExtended-B}
    :U+0180–U+024F
或者简单地使用
^[\u0000-\u024F0-9]+$

 string pattern = "^[{Latin}0-9]+$";
<>您可能想考虑匹配<代码> \p{IsLaLin ExpDeldOut}} /Cuth>,它是U+1EO-U+1EFF的命名块,它包含256个附加字符:

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

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

 string pattern = "^[{Latin}0-9]+$";
^[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{IsLatinExtended-A}\p{IsLatinExtended-B}0-9]+$
  • \p{IsBasicLatin}
    :U+0000–U+007F
  • \p{IsLatin-1supplment}
    :U+0080–U+00FF
  • \p{IsLatinExtended-A}
    :U+0100–U+017F
  • \p{IsLatinExtended-B}
    :U+0180–U+024F
或者简单地使用
^[\u0000-\u024F0-9]+$

 string pattern = "^[{Latin}0-9]+$";
<>您可能想考虑匹配<代码> \p{IsLaLin ExpDeldOut}} /Cuth>,它是U+1EO-U+1EFF的命名块,它包含256个附加字符:

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

我将使用unicode脚本

 string pattern = "^[{Latin}0-9]+$";
正如Wikipedia()所描述的,我将使用拉丁语-1补遗(00C0-00FF)、拉丁语扩展-A(0100-017F)、拉丁语扩展-B(0180-024F)和您的ASCII字母数字字符模式

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

我将使用unicode脚本

 string pattern = "^[{Latin}0-9]+$";
正如Wikipedia()所描述的,我将使用拉丁语-1补遗(00C0-00FF)、拉丁语扩展-A(0100-017F)、拉丁语扩展-B(0180-024F)和您的ASCII字母数字字符模式

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

@mtmacdonald的可能重复项可能重复项您需要使用(
@“…”
)或转义反斜杠。@stej4n为什么在第二个示例中,当ASCII字母字符低于范围00C0时,匹配项中包含ASCII字母字符?因为我添加了\w与ASCII字符匹配的字符chars@mtmacdonald您需要使用(
@“…”
)或转义反斜杠。@stej4n在第二个示例中,当ASCII字母字符低于范围00C0时,为什么ASCII字母字符包含在匹配项中?因为我添加了\w哪些匹配ASCII字符123Æ不匹配?123Æ不匹配?答案很好。您可能希望添加
\p{islatinedeadditional}
@AnthonyFaull谢谢。添加。回答很好。您可能希望添加
\p{IslatinedExtendedAdditional}
@AnthonyFaull谢谢。添加。