VB.NET中用Split拆分的正则表达式

时间:2013-02-18 12:49:37

标签: regex vb.net

我想一起使用split和regular表达式来分隔一行中的特殊代码。 这是我的路线:

  

14S15T3C16W17A0-20m0-7T

现在我想将每个项目分开,这些项目可以用于例如14S,15T,7T等 它由随机长度的数字和该数字后的一个字母组成:

  

例如:125125125125125X或11T。

还有一个例外是0-,它们将保持原样,并且必须分开。

我自己做了一个正则表达式:

Dim digits() As String = Regex.Split(line, "([0-9][A-Z]|0-)")

但问题是它只需要1位数的组合,例如,如果线是11T2B13D,它会将它分开:1,1T,2B,1,3D

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

由于将有一个字母字符或斜杠-(对于0-的情况)结束每个标记,因此可以使用Regex.Split使用此正则表达式对其进行拆分:< / p>

(?<=[-a-zA-Z])

(?<=pattern) 零宽度(文字未消费)正面后视,如果当前位置前的文字与内部pattern匹配,则匹配。< / p>

上面的正则表达式只检查当前位置前的字符是字母(大写或小写)a-zA-Z还是短划线-,并在当前位置拆分。


或者,您可以使用此正则表达式Regex.Matches执行此操作:

[0-9]+[A-Za-z]|0-

由于数字可以是任意长,您需要 1或更多量词 +。其余部分应该清楚,因为它与您尝试的非常接近。


两种方法对有效输入应具有相同的效果(根据您的规范)。但是,当输入无效时,Regex.Split方法将生成无效标记,而Regex.Matches方法生成有效标记(它将跳过无效字符/序列)。

答案 1 :(得分:0)

如果您的目标是将11T2B13D拆分为11T 2B 13D,那么您需要将正则表达式更改为1或更多数字。所以使用[0-9] + [AZ] | 0-,如果+运算符(意​​思是一个或多个)不存在,请尝试改为[0-9] [0-9] [AZ] | 0 - 。 (表示零或更多)。