2013-02-11 306 views
1

我想用正则表达式来匹配我收到的字符串的前十二个字符。我收到字符串,我想验证丢弃哪个字符串以及要保留哪个字符串。一旦我验证了字符串,然后根据字符串中的信息实例化一个对象。正则表达式 - 包括冒号

在我的例子中,我想检查一个特定的字符(A),八个数字,一个冒号,然后是B | C,然后是D.这个模式标识了一个我想要处理的字符串。然而下面的模式匹配失败和我怀疑它是由于结肠

if(Regex.IsMatch(my_string,"A[0-9]{8,}:(B|C)D")) 

我希望这种匹配,其中零是任何数量0-9和其中B是具有C.我需要互换验证是否存在冒号,因为有些情况下字符串可能会格式错误。

应通过正则表达式模式的字符示例;

A00000000:BD 
+2

你说的'如果fails'是什么意思?它究竟如何失败? – 2013-02-11 16:49:56

+1

你在文本中有'A | B后跟C',然后'B | C后跟D'。这是什么? – 2013-02-11 16:51:22

+0

不确定为什么你在'{8}}中有逗号而不是'{8}',但你的正则表达式似乎与你给出的字符串相匹配。 – 2013-02-11 16:53:04

回答

3

该正则表达式应该工作。几点建议:

  • {8,}匹配8个或更多字符。
  • 整个正则表达式还会匹配更长字符串的子字符串(即"XYZA12345678:CDEFG")。如果你不想这样,锚定你的正则表达式。
  • (B|C)可以通过[BC]

更换所以试试这个:

if (Regex.IsMatch(my_string,"^A[0-9]{8}:[BC]D")) 
+0

如果需要,您可以将[0-9]更改为\ d – spots 2013-02-11 16:57:13

+0

@spots:编号'\ d'也与非ASCII数字匹配。他似乎并不想要那样。 – 2013-02-11 16:57:56

+0

尽管这在理论上是稳定的,但我无法与这种情况相匹配,但我检查的这部分是在较长的字符串的前面,我想在D处停止验证。我使用此正则表达式来检查在将它拉成碎片之前,我的一部分琴弦。该检查是为了过滤不需要的字符串。 – 2013-02-12 08:49:56