按正则表达式拆分字符串

时间:2017-09-21 09:27:24

标签: c# regex string

这是我的字符串。

19282511~2017-08-28 13:24:28~Entering (A/B)~1013~283264/89282511~2017-08-28 13:24:28~Entering (A/B)~1013~283266/79282511~2017-08-28 13:24:28~Entering (A/B)~1013~283261

我希望将此字符串拆分如下:

19282511~2017-08-28 13:24:28~Entering (A/B)~1013~283264
89282511~2017-08-28 13:24:28~Entering (A/B)~1013~283266
79282511~2017-08-28 13:24:28~Entering (A/B)~1013~283261

我无法用斜杠(/)盲目地分割我的字符串,因为有一个值A/B也会被拆分。

通过正则表达式表达的任何想法吗?

您的帮助一定会受到赞赏。

1 个答案:

答案 0 :(得分:4)

您可以使用位于数字之间的/进行拆分:

(?<=\d)/(?=\d)

请参阅regex demo

<强>详情

  • (?<=\d) - 一个正向的后视,需要一个数字立即出现在当前位置的左侧
  • / - /字符
  • (?=\d) - 一个积极的前瞻,要求数字立即显示在当前位置的右侧。

由于\d模式位于非消费模式中,因此在拆分时仅删除/,并且数字将保留在结果项中。

enter image description here

另一个想法是使用

匹配并捕获这些字符串
/?([^~]*(?:~[^~]*){3}~\d+)

请参阅this regex demo

<强>详情

  • /? - 1或0 /个字符
  • ([^~]*(?:~[^~]*){3}~\d+) - 第1组(您需要抓取的内容):

    • [^~]* - 除~
    • 以外的零个或多个字符
    • (?:~[^~]*){3} - ~以外的3个或更多序列~以及0 {+ 1}以外的字符
    • ~\d+ - ~,然后是1位或更多位数。 C#代码看起来像

    var results = Regex.Matches(s,@“/?([^〜] (?:〜[^〜] ){3}〜\ d +)”)         。投()         .Select(m =&gt; m.Groups 1。Value)         .ToList();

enter image description here

注意:默认情况下,\d匹配所有Unicode数字。如果您不想要此行为,请使用RegexOptions.ECMAScript选项,或将\d替换为[0-9]以仅匹配ASCII数字。