1

我有以下字符串:

01-21-27-0000-00-048并且很容易将其拆分,因为每个部分由 a 分隔-,但有时此字符串表示为01-21-27-0000-00048,因此拆分它并不容易,因为最后 2 部分组合在一起。我该如何处理?另外,如果是这样的情况呢?01-21-27-0000-00.048

如果有人好奇,这是一个包裹号,它因县而异,一个县可以有 1 种格式,也可以有 100 种格式。

4

3 回答 3

4

这是使用正则表达式的一个很好的例子。您的字符串匹配以下正则表达式:

(\d{2})-(\d{2})-(\d{2})-(\d{4})-(\d{2})[.-]?(\d{3})

将输入与此表达式匹配,并从匹配中获取六组数字:

var str = new[] {
    "01-21-27-0000-00048", "01-21-27-0000-00.048", "01-21-27-0000-00-048"
};
foreach (var s in str) {
    var m = Regex.Match(s, @"(\d{2})-(\d{2})-(\d{2})-(\d{4})-(\d{2})[.-]?(\d{3})");
    for (var i = 1 /* one, not zero */ ; i != m.Groups.Count ; i++) {
        Console.Write("{0} ", m.Groups[i]);
    }
    Console.WriteLine();
}

如果您想允许其他字符,例如由破折号分隔的段中的字母,您可以使用\w而不是\d表示字母、数字或下划线。如果您希望在已知范围内允许未指定数量的此类字符,例如 2 到 4 个,您可以{2,4}在 regexp 中使用而不是更具体的{2},这意味着“正好两个”。例如,

(\w{2,3})-(\w{2})-(\w{2})-(\d{4})-(\d{2})[.-]?(\d{3})

让第一段包含两到三个数字或字母,并且还允许在第二段和第三段中包含字母。

于 2012-10-15T14:38:33.593 回答
2

首先规范化字符串。

即,如果您知道最后一部分始终是三个字符,则插入一个 - 作为倒数第四个字符,然后拆分结果字符串。沿着同一行,转换点 '.' 到破折号“-”并拆分该字符串。

于 2012-10-15T14:35:22.733 回答
0

用空字符串('')替换所有不是数字的字符。

然后你的任何字符串都变成这样的格式

012127000000048

现在您可以将它分成 (2, 2, 2, 4, 2, 3) 部分。

于 2012-10-15T14:35:02.543 回答