0

我有一个下面的字符串。我需要找到特定字符串之前的日期。是否可以在 C# 中使用正则表达式。如果是这样,请给我一个例子。

字符串是

*044*05/02/2013*14:24*
*1234*1*(Iw(1*0, M-00, R-10011002100310041
A/C 
OPERATION OK


*044*05/02/2013*14:24*
*1234*1*(Iw(1*0, M-00, R-10011002100310041
A/C 


*044*05/02/2013*14:24*
*1234*1*(Iw(1*0, M-00, R-10011002100310041
A/C 
OPERATION OK


[0r(1)2[000p[040qe1w3h162*054*05/04/2013*14:27*
*1234*1*(Iw(1*0, M-00, R-10011002100310041
A/C 


*055*05/04/2013*14:27*
*1234*1*(Iw(1*0, M-00, R-10011002100310041
A/C 
OPERATION OK


[020t*057*05/04/2013*14:27*
[05p
           BNA CNTRS
  LAST CLEARED : 00/00/00 00:00
                 COUNT 
  ENCASHED       141

[0r(1)2[000p[040qe1w3h162*065*05/05/2013*14:30*
*1234*1*(Iw(1*0, M-00, R-10011002100310041
A/C 
OPERATION OK


*071*05/06/2013*14:31*
*1234*1*(Iw(1*1, M-00, R-10011002100310041
A/C 
CUSTOMER CANCEL


[020t*076*05/06/2013*14:32*
[05p
           BNA CNTRS
  LAST CLEARED : 05/04/13 14:28
                 COUNT 
  ENCASHED       11

在上面的字符串中,我想找到字符串“BNA CNTRS”之前的日期。在这个字符串中,我应该将日期设为“05/04/2013”​​“05/06/2013”​​。

4

4 回答 4

0

使用以下正则表达式检查此匹配:

(\d{2}\/\d{2}\/\d{4})(?=[^(BNA)]+BNA CNTRS)
于 2013-06-03T07:03:49.277 回答
0

根据您的模式试试这个:

string strRegex = @"(?=(\d{2}/\d{2}/\d{4}))(?=([^\n]+\n)+[^\n]*BNA\sCNTRS[^=\n]*\n)([^\n]+\n)+";
RegexOptions myRegexOptions = RegexOptions.Singleline;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"......"; #text you want to search

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    System.Out.println(myMatch.groups(1).value);
  }
}

演示:这里

于 2013-06-03T07:04:46.740 回答
0

尝试:\*(?<date>\d{2}/\d{2}/\d{4})[^/]*?BNA CNTRS

我在正则表达式上使用了显式捕获、单行选项。

正则表达式英雄链接:http ://regexhero.net/tester/?id=c6694c7e-7777-4cc0-ab76-8846ef365330

于 2013-06-03T06:28:12.557 回答
0

您可以先创建子字符串,直到所说的单词“BNA CNTRS”,然后得到所需的日期字符串。但请确保上述格式不会因为它依赖于“BNA CNTRS”而改变。

于 2013-06-03T06:02:10.803 回答