3

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

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

我怎么解决这个问题?

4

2 回答 2

3

由于每个标记都会有一个字母字符或斜线-(对于 的情况0-),因此可以使用Regex.Split以下正则表达式对其进行拆分:

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

(?<=pattern)零宽度(不消耗文本)正向后视,如果当前位置之前的文本与内部匹配,它将匹配pattern

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


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

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

由于数字可以是任意长的,因此您需要1 个或多个 quantifier +。其余的应该很清楚,因为它与您尝试过的非常接近。


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

于 2013-02-18T12:55:25.477 回答
0

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

于 2013-02-18T12:55:07.480 回答