2013-02-08 27 views
0

我试图匹配格式化为[整数] [结肠] [alphanum] [结肠] [整数]的字符串。例如,42100:ZBA01:20。我需要通过冒号拆分这些...正则表达式匹配[整数] [结肠] [alphanum] [结肠] [整数]

我想学习正则表达式,所以如果可以的话,告诉我我做错了什么: 这就是我所能想到的。 ..

^(\d):([A-Za-z0-9_]):(\d)+$ 
^(\d+)$ 
^[a-zA-Z0-9_](:)+$ 
^(:)(\d+)$ 

起初我试着匹配部分字符串,这些匹配整个字符串。正如你所看到的,我对正则表达式不是很熟悉。

编辑:正则表达式是输入一个桌面应用程序。我不确定要使用哪种“语言”或“类型”的正则表达式,所以我认为.NET。 我需要能够识别每个分组字符,按冒号分隔。因此,组#1应该是第一个整数,组#2应该是字母数字组,组#3应该是整数(范围1-4)。

谢谢你在前进,

大流士

+1

分割什么!..... – Anirudha 2013-02-08 15:20:19

+0

对不起分号,这是我做的改变。发布更新。 – Darius 2013-02-08 15:23:31

+1

,你需要指定你正在使用的语言..正则表达式实现在不同的语言中有所不同 – Anirudha 2013-02-08 15:25:21

回答

5

我承担分号(;)的意思是冒号(:)?好,有一些基础知识。

  • ^匹配输入的开始。也就是说,正则表达式只有在输入开始时发现匹配时才会匹配。
  • 同样,$输入的端部相匹配。

^(\d+)$将匹配由一个或多个数字的字符串。这是因为匹配需要在输入开始时开始,并在输入结束时停止。换句话说,整个输入需要匹配(而不仅仅是它的一部分)。所述+表示一个或多个匹配。

有了这些知识,你会发现^(\d):([A-Za-z0-9_]):(\d)+$实际上是非常接近的是正确的。该表达式表明整个输入需要匹配:

  1. 一个数字;
  2. 冒号;
  3. 一个字字符(或调用它的一个字母数字字符);
  4. 冒号;
  5. 一位或多位数字。

的问题显然是在1和3,您需要添加一个+量词有匹配一个或多个倍,而不是只一次。此外,您希望将这些量词放置在捕获组内,以便获取一个捕获组内的多个匹配,而不是接收包含单个匹配的多个捕获组。

^(\d+):([A-Za-z0-9_]+):(\d+)$ 
+0

是'_'甚至字母数字? – nhahtdh 2013-02-08 15:29:54

+0

从技术上讲,没有。但是OP没有清楚地表明他在找什么。 – 2013-02-08 15:30:52

+0

@nhahtdh在大多数变体中,它被称为*单词字符*。为了清晰起见,我更新了答案 – 2013-02-08 15:31:55

3

您需要使用量词

^(\d+):([A-Za-z0-9_]+):(\d+)$ 
    ^ ^ ^

+是量词匹配前述模式1到多次

现在,您可以访问通过访问特定组的值

+1

在某些语言中,'\ w'不仅包含简单的字母数字('_'和'-'是两个常见的)。 – 2013-02-08 15:25:19

+0

@JonahBishop谢谢你的建议..编辑的ans..stackoverflow应该强制标记正则表达式的问题与他们正在使用的语言... – Anirudha 2013-02-08 15:26:30

+0

@JonahBishop:哪一种语言包括'-'?到目前为止,我所看到的全部是字母数字和'_'。 – nhahtdh 2013-02-08 15:27:34