正则表达式模式匹配并获得两个字符串

时间:2017-05-01 20:47:31

标签: c# .net

我想模式匹配此字符串

  

***** XXXXXXX 04/28/2017 14:48:40 *****

我想获得XXXXXXX04/28/2017 14:48:40

所以我尝试了正则表达式

@"\*{5}(.*?)\*{5}"

匹配模式,但如何获取其他两个值。

4 个答案:

答案 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