寻找具体的正则表达式

时间:2018-02-14 09:48:40

标签: c# regex

我一直在寻找为我的具体情况创建一个正则表达式。最远的我来自我对Regex的有限知识,并且通过在StackOverflow上搜索是这个正则表达式:

^[pP][a-zA-Z0-9- ]*

我正在寻找强制字符串的正则表达式:

  • 以字母'p'或'P'开头,所以是小写和大写
  • 不短于19个字符
  • 可能包含' - ','%20',''或'+'
  • 以'0000'结尾
  • 在'p'和四个零之间以及' - ','%20','或'+'分隔符之间是字母数字

应与正则表达式匹配的字符串示例:

  • PLX000000000PQ50000
  • pLX000000000PQ50000
  • plx000000000pq50000
  • PLX-0000-0000-0PQ5-0000
  • PLX-0000-0000-0PQ50000
  • PLX + 0000 + 0000 + 0PQ5 + 0000
  • PLX%200000%200000%200PQ5%200000
  • PLX 0000 0000 0PQ5 0000

我在寻找什么是正则表达式? 我正在使用的语言是C#

3 个答案:

答案 0 :(得分:4)

添加@ Zenoo的答案,如果您想将%20作为一次出现考虑,可以使用以下表达式:

[pP]([a-zA-Z0-9 +-]|(%20)){14,}0000

您基本上将可能的字符列表%20添加为单个匹配项。

Here is the live demo您可以用它来测试您想要的所有示例(我已经包含了您提供的那些示例),并提供了所需的所有技术说明,我将在下面复制:< / p>

  • pP匹配列表中的单个字符pP(区分大小写)
  • 第一捕获组([a-zA-Z0-9 + - ] |(%20)){14,} {14,}量词 - 匹配13次和无限次,尽可能多次, 根据需要回馈(贪婪)
  • 第一选择[a-zA-Z0-9 + - ]匹配中的单个字符 下面的列表[a-zA-Z0-9 + - ] a-z范围内的单个字符 在(索引97)和z(索引122)之间(区分大小写)
  • A-Z A(索引65)和Z(索引)之间的单个字符 90)(区分大小写)0-9单个字符在0之间的范围内 (索引48)和9(索引57)(区分大小写)
  • + - 匹配列表中的单个字符+ - (区分大小写)
  • 第二替代(%20)第二捕获组(%20)%20匹配 字符%20字面意思(区分大小写)
  • 0000匹配字符 0000字面意思(区分大小写)

答案 1 :(得分:3)

您可以尝试此RegEx:[pP][a-zA-Z0-9- +%]{13,}0000

[pP]匹配列表pP中的单个字符(区分大小写)

{13,}匹配[a-zA-Z0-9- +%]

的13次或更多次迭代
  • a-z a(索引97)和z(索引122)范围内的单个字符(区分大小写)
  • A-Z A(索引65)和Z(索引90)范围内的单个字符(区分大小写)
  • 0-9 0(索引48)和9(索引57)范围内的单个字符(区分大小写)
  • - +%匹配列表- +%中的单个字符(区分大小写)

0000字面匹配字符0000(区分大小写)

答案 2 :(得分:2)

正则表达式可用于精确匹配格式:

^(?=.{14,}0000$)[pP][a-zA-Z0-9]*(?:(?(1)\1|([- +]|%20)?)[a-zA-Z0-9]+)*$
  • (?=.{14,}0000$)断言长度> = 18且以0000
  • 结尾的行
  • (?(1)\1|([- +]|%20)?)是一个 if子句,它检查分隔符是否匹配,它应该用作下一个分隔符

Live demo