C# 用于看似简单任务的正则表达式模式
使用C# 我需要创建8个正则表达式模式来检查一组任意长度的字符串(文本文件中每行一个)。我试图将模式编写为字符串,然后稍后将其转换为C# 用于看似简单任务的正则表达式模式,c#,regex,string,C#,Regex,String,使用C# 我需要创建8个正则表达式模式来检查一组任意长度的字符串(文本文件中每行一个)。我试图将模式编写为字符串,然后稍后将其转换为Pattern 我相信我有: 一,。所有数字(如128329983928):“^[0-9]{string.length}$” 二,。所有小写字母(如aejksanikp):“^[a-z]{string.length}$” 三,。全大写(如AIJDJWIHJMNQ):“^[A-Z]{string.length}$” 我需要帮助的是: 四,。全部小写,全部为一个字母(如
Pattern
我相信我有:
一,。所有数字(如128329983928):“^[0-9]{string.length}$”
二,。所有小写字母(如aejksanikp):“^[a-z]{string.length}$”
三,。全大写(如AIJDJWIHJMNQ):“^[A-Z]{string.length}$”
我需要帮助的是:
四,。全部小写,全部为一个字母(如AAAAAAAAAAAA)
五,。全大写,全一个字母(如aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
六,。任何情况下,一封信(如aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
七,。任何数字加上任何单个字母,任何情况下:(例如1420A843aa830a3237A)
八,。任何单个数字(如22222)
对于数字4、5和8,我可以只做一些|(或),但我希望有一种比“a | b | c | d | e..{string.length}”更好的方法。我真的不知道6点和7点该怎么办
四,。全部小写,全部为一个字母(如AAAAAAAAAAAA)
五,。全大写,全一个字母(如aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
因为这两个将是:
"^[a]{string.length}$"
"^[A]{string.length}$"
您应该能够确定其余部分(提示:[]表示一个集合)
编辑:更改了模式,以适应输入是“文本文件中每行一个”的事实,并且regexp需要匹配整行。4)。它从字符串(或行,如果m
修饰符)的开始(^
)到结束($
)。它捕获一个字母字符(([a-z])
),然后查找该捕获的字符0多次(\1*
)
5) 。执行相同的操作,但首先捕获组[A-Z]
6) 。您可以使用[a-Z]
,[a-Z]
,[a-zA-Z]
,或者只使用i
修饰符使其不区分大小写。(带修饰语)
7) 。这个有点棘手。我们仍然像以前一样使用锚点^
和$
。但是现在我们寻找0+个数字并捕获一个字母字符(这意味着字母可以位于第一位,也可以位于一些数字之后)。在此之后,我们将查找数字或捕获的字母0+次,直到结束。听起来像是一个字母是必选的;但是,如果希望它是可选的,则可以在捕获的字母(([a-z])?
)后面放置一个?
)。请记住,使用i
修饰符使这一个不区分大小写,或者用[a-zA-Z]
替换捕获组
8) 。将示例1中的[a-z]
替换为[0-9]
或\d
参考文献:
- (即
\d
)
- (我们使用它捕获字符并用
\1
引用它)
注意:由于这看起来像是家庭作业,请询问您是否有超出我解释范围的问题,以便您了解有关表达式的一两件事:)
嗯
嗯
嗯
^([a-z])\1{string.length-1}$
^([A-Z])\1{string.length-1}$
^(?i)([a-z])\1{string.length-1}$
^([a-zA-Z0-9]){string.length-1}$
除非它必须以数字开头,否则您就可以
适用于:^[0-9][a-zA-Z0-9]{string.length-1}$
^([0-9])\1{string.length-1}
请注意:
^
表示字符串的开头和$
字符串的结尾。这防止了
部分匹配
(?i)
表示开始不区分大小写的搜索
头朝上:四处测试?简单得多,去掉括号和大括号:a+
和a+
。不要忘记字符串开始/结束:^a+$
和^a+$
。否则,像“bbbaaacsfdfdf”这样的字符串也会导致匹配……写入任何regexp的方法总是不止一种,上面提供的方法确实会执行所需的匹配。我是说用户需要理解[]在regexp中代表什么。啊,好吧,我觉得你的声明提到了我的全部评论。如果您只谈论括号,那么是的,我同意您的看法:-)但它仍然不是给定任务“所有小写字母,所有一个字母”和“所有大写字母,所有一个字母”的解决方案,因为缺少“^”和“$”标记,现在只需编辑您的答案。我想撤销我的-1(鉴于这里的评论为您的答案提供了一些相关的上下文),但我不能,因为它已被锁定(自从我设置它以来已经超过20分钟了),现在撤销它需要对答案进行编辑。。。啊…+1你在提到匹配“整个字符串”的重要性时击败了我。我建议使用正则表达式工具并使用变体。这里有一个:但是还有很多其他的。唯一需要注意的是,数字7听起来好像只有一个字母(不区分大小写)(类似于1和6的组合)。
^([a-z])\1*$
^\d*([a-z])(\d|\1)*$