Skip to main content
 首页 » 编程设计

c#之必须至少有一个字母的正则表达式

2024年02月25日3052php

我有一个案例,我使用正则表达式队列来过滤掉观察者模式中的特定项目。过滤器将根据值将值放置在特定控件中。然而,控件模式之一是它可以接受任何 ASCII 字符。让我用正则表达式按顺序列出过滤器

Column         Rule                        Regex 
Receiving     7 DIGITS                     @"^[1-9]([0-9]{6}$)"   --->Works 
Count         2 digits, no leading 0       @"^[1-9]([0-9]{0,1})$" --->Works 
Producer      any ASCII char.              @".*"                  --->too broad 
              MUST contain a letter 

是否有一个正则表达式可以接受任何一组 ASCII 字符,但其中一个必须是字母(大写或小写)? @"^(?=.*[A-Za-z])$"-->没用

需要表达的例子

  • 123红
  • 红色
  • 123 红123
  • 红色 - 123

红色

请您参考如下方法:

如果你想匹配你可能使用的整个 ASCII 字符范围

@"^(?=[^A-Za-z]*[A-Za-z])[\x00-\x7F]*$" 

如果只允许使用可打印的字符

@"^(?=[^A-Za-z]*[A-Za-z])[ -~]*$" 

请注意 (?=[^A-Za-z]*[A-Za-z]) 正先行位于 ^ 之后,即它仅在字符串的开头触发。它要求在 ASCII 字母以外的任何 0 个或更多字符后跟一个 ASCII 字母。

您的 ^(?=.*[A-Za-z])$ 模式不起作用,因为您想要匹配一个空字符串 (^$)包含 (?=...) 在除换行符 (.* )。