我有一个案例,我使用正则表达式队列来过滤掉观察者模式中的特定项目。过滤器将根据值将值放置在特定控件中。然而,控件模式之一是它可以接受任何 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])$
模式不起作用,因为您想要匹配一个空字符串 (^$
)包含 (?=...)
在除换行符 (.*
)。
关于c# - 必须至少有一个字母的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275824/