繁体   English   中英

C# 正则表达式中的组

[英]Groups in a C# regular expression

我正在使用以下测试器来尝试找出这个正则表达式: 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 - 123
第 2 组 - 字符串 A
比赛2
第 1 组 - 456
第 2 组 - 字符串 B

出于某种原因,我提供的链接上的测试人员看到有第二组,但它是空白的。 我之前用 PHP 完成了这个,它似乎像我描述的那样工作,但在 C# 我看到了不同的结果。 您可以提供的任何帮助将不胜感激。

我还应该注意,这可能会扩展多行......

  • 编辑 *

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

对于比赛 1,我想得到:2011-08-09 09:25:57 and,069 [9] Orchard.Environment.Extensions.ExtensionManager - 加载扩展时出错

对于比赛 2:2011-08-09 09:25:57 and,493 [8] Orchard.Environment.Extensions.ExtensionManager

我正在尝试找到一种很好的方法来解析一个巨大的文本文件中的错误日志文件并维护错误发生的日期以及随之而来的详细信息

第一组匹配 3 个数字,第二组匹配字符串的其余部分,因为模式中没有任何内容可以阻止.*? 从不匹配字符串的其余部分。

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

.*表示匹配任何零次或多次。 ? 意思是找到最少的次数,所以它选择零匹配作为最小值。

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

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

([0-9]{3})([^0-9]*)

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

解释:

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

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

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

,([0-9]{3})([^\n]*)

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

根据您的评论,这就是您要匹配的内容

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

此表达式将匹配第一个捕获组中的日期和 rest 直到下一个日期或直到第二个捕获组中的字符串结尾。

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

在 Regexr 上查看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM