我想模式匹配此字符串
***** XXXXXXX 04/28/2017 14:48:40 *****
我想获得XXXXXXX
和04/28/2017 14:48:40
。
所以我尝试了正则表达式
@"\*{5}(.*?)\*{5}"
匹配模式,但如何获取其他两个值。
答案 0 :(得分:1)
你不需要一个正则表达式,因为星星和日期总是相同的长度,它很容易提取内容,在这种情况下,如果它不是很重要内容是否有空格
var a = "***** ABCDEFGEF 04/28/2017 14:48:40 *****";
var content = a.Substring(6, a.Length-32);
var datestring = a.Substring(a.Length-25).Replace("*","");
Console.WriteLine(content);
Console.WriteLine(datestring);
输出:
ABCDEFGEF
04/28/2017 14:48:40
在代码的内容行中,从最后一个星号和空格开始,然后直到字符串的长度减去日期/时间和星星(开始和结束星星)。
对于日期字符串,您只需从日期/时间和星星的长度开始。
答案 1 :(得分:1)
以下代码将每个部分拉出为自己的组。使用正则表达式组周围的括号指定组。然后,您可以将每个组索引为字典,并在字符串中显示组的位置。 0引用与1匹配的整个字符串作为第一个(*****)部分,依此类推。
var str = "***** XXXXXXX 04/28/2017 14:48:40 *****";
var reg = new Regex(@"(\*{5})\s(.*?)\s([0-9/]*?)\s([0-9:]*?)\s(\*{5})", RegexOptions.Compiled);
var groups = reg.Match(str).Groups;
使用Lazy Quantifiers意味着每个组只匹配正则表达式匹配的最小字符数。 \ s将匹配字符串编码的任何空白字符。
上面的代码在groups变量中留下了以下匹配项:
0 > "***** XXXXXXX 04/28/2017 14:48:40 *****"
1 > "*****"
2 > "XXXXXXX"
3 > "04/28/2017"
4 > "14:48:40"
5 > "*****"
答案 2 :(得分:1)
此表达式将匹配
(X{7})|([042817/:])
= XXXXXXX 04/28/2017 14:48:40
此表达式将匹配
(X{7})
= XXXXXXX
([042817/:])
= 04/28/2017 14:48:40
答案 3 :(得分:0)
您可以从Regex Match对象的Groups属性访问中间部分。有关群组属性
的详细信息,请查看MSDN