c#正则表达式中的组

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:05:05

我正在使用以下测试器来尝试找出这个正则表达式:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

我输入

: 123stringA 456 stringB

我的模式:

([0 - 9] {3}) (. * ?)

模式最终将是一个日期,但出于这个问题的考虑,我将保持简单并使用简化的输入。

我理解这种模式的方式,它是"给我3个数字[0-9]{3},后面跟着任意数量的任意类型的字符。*,直到它到达下一个匹配?

我想要/期望这个测试是2个匹配,每个匹配2组:
匹配1
      Match2
   第2组- b

由于某种原因,我提供的链接上的测试人员看到有第二个组,但它出现空白。我以前用PHP做过这个,它似乎像我描述的那样工作,但在c#中,我看到了不同的结果。你能提供的任何帮助都会很感激。

我还应该注意,这可以展开多行…

  • edit *

下面是实际的输入:2011-08-09 09:25:57,069 [9] Orchard.Environment.Extensions.ExtensionManager加载扩展出错2011-08-09 09:25:57,493 [8]Orchard.Environment.Extensions.ExtensionManager

对于match 1,我想要得到:2011-08-09 09:25:57和[9]张志强,张志强,张志强-加载扩展时出错

和匹配2:2011-08-09 09:25:57和[8]张志强,张志强。

我正试图找到一种好方法来解析错误日志文件,它在一个巨大的文本文件中并维护错误发生的日期和随之而来的细节

c#正则表达式中的组

第一组匹配3位数字,第二组匹配字符串的剩余部分,因为模式中没有任何东西可以阻止.*?不匹配字符串的剩余部分。

更正:第二组匹配一个空字符串,因为模式中没有任何东西可以阻止.*?不匹配一个空字符串。

.*表示匹配0次或多次。?表示寻找最小次数,因此选择0次匹配作为最小值。

试试这个模式,([0-9]{3})([a-zA-Z]*)

根据你的评论,这是你想要匹配的

2011-08-09 09:25:57,069 [9]Orchard.Environment.Extensions.ExtensionManager -加载错误扩展版本2011-08-09 09:25:57,493 [8]Orchard.Environment.Extensions.ExtensionManager -加载错误扩展

这个表达式将匹配第一个捕获组中的Date,其余的匹配到下一个日期,或者匹配到第二个捕获组中的字符串末尾。

('d{4}(?:-'d{2}){2})(.*?)(?=(?:'d{4}(?:-'d{2}){2}|$))

查看Regexr

不知道为什么这个工具会给你这个,但是你可以切换到这个在。net中工作的替代模式

([0-9]{3})([^0-9]*)
http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

解释:

在之前的模式中,非贪婪版本匹配0个字符。

在新版本中,[^0-9]表示匹配范围0-9以外的任何字符(注意否定的^说明符)。

Update:给定实际的输入字符串(在注释中),模式更改为(假设OP想要做什么是猜测:

,([0-9]{3})([^'n]*)
http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1