用正则表达式拆分复杂的字符串

时间:2014-09-14 16:24:44

标签: c# regex

我对正则表达式有非常基本的了解,这对我来说太难了。我需要将字符串分成三部分。

我的输入看起来像XXX YYY:ZZZ:(始终以:ZZZ:结尾)

  • XXX可以是任何内容,包括$&+,:;=?@#|'<>.-^*()%!和空格
  • YYY是按字母顺序排列的字符,可以.结尾或根本不存在
  • ZZZ是可以有前导零的数字,位于字符串末尾的两个:之间

我能想到的最棘手的字符串是Lo-rem ip sum.,::0001678154:ZZZ 0001678154我们可以摆脱:ZZZ:,因此剩余部分为Lo-rem ip sum.,:,但最后一个字母不是字母数字或.,这意味着YYY不是包含在此字符串XXX中的是剩余的内容(Lo-rem ip sum.,:

现在我有可怕的半功能代码,硬编码长度,ifs,substrings和splits我相信你可以提出更好的解决方案。感谢

1 个答案:

答案 0 :(得分:1)

以下正则表达式会将三组字符捕获并存储到三个不同的组中,

^(?<xxx>.*?)(?<yyy>(?:[A-Za-z0-9])+\.?)?:(?<zzz>\d+):$

DEMO

第二组之后的

?将使该组成为可选组。