这是我的字符串。
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
也会被拆分。
通过正则表达式表达的任何想法吗?
您的帮助一定会受到赞赏。
答案 0 :(得分:4)
您可以使用位于数字之间的/
进行拆分:
(?<=\d)/(?=\d)
请参阅regex demo
<强>详情
(?<=\d)
- 一个正向的后视,需要一个数字立即出现在当前位置的左侧/
- /
字符(?=\d)
- 一个积极的前瞻,要求数字立即显示在当前位置的右侧。由于\d
模式位于非消费模式中,因此在拆分时仅删除/
,并且数字将保留在结果项中。
另一个想法是使用
匹配并捕获这些字符串/?([^~]*(?:~[^~]*){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();
注意:默认情况下,\d
匹配所有Unicode数字。如果您不想要此行为,请使用RegexOptions.ECMAScript
选项,或将\d
替换为[0-9]
以仅匹配ASCII数字。