必须至少包含一个字母的正则表达式

时间:2019-05-23 13:00:22

标签: c# regex

在某些情况下,我使用正则表达式队列来过滤观察者模式中的特定项目。过滤器将根据值将这些值放置在特定控件中。但是,控件模式之一是它可以接受任何ASCII字符。让我用RegEx按顺序列出过滤器

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字符集的正则表达式,但是其中1个必须为字母(大写或小写)? @“ ^(?=。* [A-Za-z])$”->无效

需要表达的示例

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

红色

3 个答案:

答案 0 :(得分:2)

如果要匹配整个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])$模式不起作用,因为您想匹配一个空字符串(^$),该字符串包含(?=...),该字符串在任意0后面至少包含一个ASCII字母([A-Za-z]) +除换行符(.*)以外的其他字符。

答案 1 :(得分:0)

怎么样 test <- data.frame(name= c("A", "B", "C", "D", "E"), v1 = c(2, 4, 1, 1, 2), v2 = c(3, 4, 2, 1, 5), stringsAsFactors = FALSE) 吗?

在行首和结尾之间,接受任意数量的任何字符,然后接受至少一个a-z / A-Z字符,然后再次接受任意数量的任何字符。

答案 2 :(得分:0)

您可以尝试[A-Za-z]+

至少有一个字母时匹配。您想要更具体的内容吗?