regex模式用于看似简单的任务

本文关键字:简单 任务 模式 用于 regex | 更新日期: 2023-09-27 17:58:38

使用C#

我需要创建8个正则表达式模式来检查一堆任意长度的字符串(文本文件中每行一个)。我正在尝试将模式写为字符串,然后稍后将它们转换为Pattern

我相信我有:

1。所有号码(例如128329983928):"^[0-9]{string.length}$"

2。全部小写(例如aejksanikp):"^[a-z]{string.length}$"

3。全部大写(如AIJDJWIHJMNQ):"^[A-Z]{string.length}$"

我需要帮助的是:

4。全部小写,全部为一个字母(例如aaaaaaaaaa)

5。全部大写,全部为一个字母(例如AAAAAAAAAAA)

6。任何情况下,一个字母(如AAaaaaAAaaaaaaaaaa)

7。任何数字加上任何单个字母,任何情况:(例如1420A843aa830a3237A)

8。任何单个号码(如22222222222)

对于数字4、5和8,我可以做一堆|(或),但我希望有比"a|b|c|d|e...{string.length}"更好的方法。我真的不知道6岁和7岁该怎么办。

regex模式用于看似简单的任务

4)。它从字符串(或行,如果是m修饰符)的开始(^)到结束($)进行查找。它捕获一个字母字符(([a-z])),然后查找该捕获的字符0+次('1*)。演示。

^([a-z])'1*$

5) 。执行相同的操作,但首先捕获组[A-Z]。演示

6) 。可以使用[a-Z][A-z][a-zA-Z],也可以仅使用i修饰符使其不区分大小写。演示(带修改器)。

7) 。这个有点棘手。我们仍然像以前一样使用锚^$。但现在我们寻找0+个数字,并捕获一个字母字符(这意味着字母可以在一些数字的前面或后面)。在此之后,我们查找一个数字或捕获的字母0+次,直到结束。听起来字母是必填的;但是,如果您希望它是可选的,您可以在捕获的字母(([a-z])?)后面放一个?。请记住使用i修饰符使此不区分大小写,或者用[a-zA-Z]替换捕获组。演示。

^'d*([a-z])('d|'1)*$

8) 。将实施例1中的[a-z]替换为[0-9]'d。演示。


参考文献:

  • 速记字符类(即'd
  • 分组和捕获(我们用它来捕获角色并用'1引用它)

注意:由于这看起来像是家庭作业,询问您是否有超出我解释范围的问题,以便您了解一两个关于表达式的知识:)

4。全部小写,全部为一个字母(例如aaaaaaaaaa)

5。全部大写,全部为一个字母(例如AAAAAAAAAAA)

由于这两个将是:

"^[a]{string.length}$"
"^[A]{string.length}$"

你应该能够确定其余的(提示:[]代表一组)

编辑:更改了模式,以满足以下事实:输入为"文本文件中每行一个",regexp需要匹配整行。

  1. 好的
  2. 好的
  3. 好的
  4. ^([a-z])'1{string.length-1}$
  5. ^([A-Z])'1{string.length-1}$
  6. ^(?i)([a-z])'1{string.length-1}$
  7. ^([a-zA-Z0-9]){string.length-1}$,除非它必须以数字开头,否则你会去用于:^[0-9][a-zA-Z0-9]{string.length-1}$
  8. ^([0-9])'1{string.length-1}

注意:

  • ^表示字符串的开始,$表示字符串的结束。这样可以防止部分匹配
  • (?i)表示不区分大小写搜索的开始