所以我有一个由文本,特殊字符和小数组成的字符串:
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。中。
答案 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}
它将开始按预期方式匹配和捕获数据。
答案 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}