如何拆分不一致的字符串的一部分?

时间:2012-10-15 14:31:42

标签: c#

我有以下字符串:

01-21-27-0000-00-048并且很容易将它拆分,因为每个部分都由-分隔,但有时这个字符串表示为01-21-27-0000-00048,因此拆分它并不容易,因为最后两部分组合在一起。我怎么处理这个?此外,它可能是01-21-27-0000-00.048

的情况

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

3 个答案:

答案 0 :(得分: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},这意味着“正好两个”。例如,

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

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

答案 1 :(得分:2)

首先规范化字符串。

即。如果你知道最后一部分总是三个字符,那么插入一个 - 作为倒数第四个字符,然后拆分结果字符串。沿同一行,转换点'。'短划线' - '并拆分该字符串。

答案 2 :(得分:0)

emptyString ('')替换所有不是数字的字符。

然后你的任何字符串都会变成像

这样的格式

012127000000048

现在你可以使用它分为(2,2,2,4,2,3)部分。