复杂的正则表达式

时间:2015-12-29 07:25:07

标签: .net regex

我必须写一个正则表达式来匹配字符串。我将使用.net C#。

  1. 字符1必须是字母[A-Z,a-z]。

  2. 字符2必须是连字符。

  3. 字符3到6必须是数字[0-9],字母[A-Z,a-z]或插入符号[^]。

  4. 如果任何字符3到6都有[^],则所有后续字符必须等于[^]。

  5. 我最后写下了表达式:

    [a-zA-Z][-]([0-9a-zA-Z\^]{4})
    

    但我不知道如何照顾第四个标准。

    我是写regex的新手,所以无论我写的是通过教程。如果有人可以帮助我完成正则表达式并分享链接或破坏正则表达式并解释它以便我可以学习并编写更复杂的正则表达式,那将是很有帮助的。

2 个答案:

答案 0 :(得分:3)

我觉得它可能写得更简单但是你走了:

^[a-zA-Z]-([0-9a-zA-Z]|\^(?=($|\^))){4}$

我修改了你的正则表达式并添加了最后一个条件。

  • 在开头和结尾添加^$以仅匹配整个字符串
  • 删除[]
  • 周围不需要的-
  • 删除了最后一组的() - 没必要

最后一个条件是通过将最后一个组更改为[0-9a-zA-Z](这很容易)或\^(?=($|\^))来完成的。这是插入符号的特殊处理:

  • Caret必须跟着字符串或其他插入符(?=($|\^))结束。这使用了一个前瞻性的肯定断言,以确保在第一个插入符号和结尾之间只有插入符号。

答案 1 :(得分:-1)

转到RegEx101:https://regex101.com/r/lC1pD7/1

我在那里插入了你的部分正则表达式。 它有一个快速参考,可以轻松完成,测试和理解。

[我并没有以任何方式与他们联系]