首页 > 解决方案 > 编辑正则表达式以实现角色(至少需要一个字母)

问题描述

我的 C# 代码上有一个正则表达式,我想通过添加约束来编辑它,以在字符串不包含至少 1 个字母时拒绝文本,无论语言是什么。

我的正则表达式:@"^(?!\s+$)[\p{L}\p{M}\p{N}\p{Zs}\t'.-]+$"

请有任何建议。

标签: c#regex

解决方案


任何 Unicode 字母都可以匹配\p{L}(请参阅您自己的模式)。

要匹配除 Unicode 字母之外的任何字符,为了“获取”字符串中的字母,您可以使用\P{L}*. 如果您只有没有换行符的字符串,您可以简单地使用.*or .*?

请注意,此要求还涵盖了至少有一个非空白字符的要求,因此(?!\s+$)前瞻变得多余(因为它所做的只是在字符串中只有空白时取消匹配)。

要要求某些模式稍后出现在字符串中,您可以使用前瞻:

@"^(?=\P{L}*\p{L})[\p{L}\p{M}\p{N}\p{Zs}\t'.-]+$"
// ^^^^^^^^^^^^^^^
@"^(?=.*\p{L})[\p{L}\p{M}\p{N}\p{Zs}\t'.-]+$"
// ^^^^^^^^^^^

请参阅.NET 正则表达式演示

详情

  • ^- 字符串的开始
  • (?=\P{L}*\p{L}) - 在 Unicode 字母以外的零个或多个字符之后,必须有一个 Unicode 字母
  • [\p{L}\p{M}\p{N}\p{Zs}\t'.-]+- 一个或多个字母、变音符号、数字、水平空格'.-字符
  • $- 字符串结束。

推荐阅读