正则表达式捕获字符串中的小数

时间:2018-12-19 15:36:25

标签: .net regex regex-group

所以我有一个由文本,特殊字符和小数组成的字符串:

2018-12-18 00:00:00 : TEXT0        TEXT1 0,123 - TEXT2 1,123 - TEXT3 2,123 - TEXT4 3,123

我对可以捕获2,123的东西很感兴趣。到目前为止,我已经尝试过类似的事情:

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+ ) \w+ \d+,\d{3} - \w+ \d+,d{3} - \w+ (\d+,d{3}) - \w+ \d+,d{3}

但是它似乎不起作用。我要在这里捕获另外两个组,一个用于前面的日期,另一个用于TEXT0。他们自己很好地工作。有提示吗?

我坐在.NET 4.5.2。中。

2 个答案:

答案 0 :(得分:1)

您似乎在正则表达式中只有很少的错别字,因为您打算捕获数字而只写了d而不是\d,所以在一个地方有多个空格,但是由于它不匹配。

从此更改您的正则表达式,

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+ ) \w+ \d+,\d{3} - \w+ \d+,d{3} - \w+ (\d+,d{3}) - \w+ \d+,d{3}

对此,

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+) +\w+ \d+,\d{3} - \w+ \d+,\d{3} - \w+ (\d+,\d{3}) - \w+ \d+,\d{3}

它将开始按预期方式匹配和捕获数据。

Live Demo

答案 1 :(得分:1)

除了编写d而不是\d并匹配单个空格之外,您还可以通过重复匹配\w+ \d,\d{3} -的部分并使数字部分用逗号a来缩短正则表达式捕获组。

这样,捕获组将是重复模式的最后一次出现:

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) : (V04\.10\w+|\w+ +)(?:\w+ (\d,\d{3}) - )*\w+ \d+,\d{3}

Regex demo