提问者:小点点

编辑regex以实现角色(至少需要一个字母)


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

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

有什么建议请。


共1个答案

匿名用户

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

要匹配Unicode字母以外的任何字符,为了“找到”字符串中的字母,可以使用\p{L}*。如果只有没有换行符的字符串,则可以简单地使用.*.*?

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

要要求某些模式在字符串后面出现,可以使用lookahead:

@"^(?=\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'。-]+-一个或多个字母、变音符、数字、水平空格、'.-字符
  • $-字符串结尾。