我想一起使用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
我该如何解决这个问题?
答案 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 - 。 (表示零或更多)。