我正在使用以下测试程序来尝试找出这个正则表达式: 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
第1组 - 123
第2组 - stringA
MATCH2
第1组 - 456
第2组 - stringB
出于某种原因,我提供的链接上的测试人员看到有第二组,但它是空白的。我以前用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和 ,069 [9] Orchard.Environment.Extensions.ExtensionManager - 加载扩展程序时出错
和比赛2: 2011-08-09 09:25:57和 ,493 [8] Orchard.Environment.Extensions.ExtensionManager
我正在尝试找到一种解析错误日志文件的好方法,该错误日志文件位于一个巨大的文本文件中,并保留错误发生的日期以及随之而来的详细信息
答案 0 :(得分:2)
第一组匹配3位数,第二组匹配字符串的其余部分,因为模式中没有任何内容可以防止.*?
与字符串的其余部分不匹配。
更正:第二组匹配一个空字符串,因为模式中没有任何内容可以防止.*?
与空字符串不匹配。
答案 1 :(得分:1)
.*
表示匹配任何零次或多次。 ?
意思是找到最小次数,因此它选择零匹配作为最小值。
尝试使用此模式,([0-9]{3})([a-zA-Z]*)
答案 2 :(得分:0)
不确定该工具为何会提供此功能,但您可以切换到适用于.Net
的替代模式([0-9]{3})([^0-9]*)
http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1
<强>解释强>
在您之前的模式中,nongreedy版本匹配0个字符。
在新版本中,[^0-9]
表示匹配范围0-9
以外的任何字符(请注意否定^
说明符)。
更新:鉴于实际输入字符串(在注释中),模式更改为(假设OP想要执行的操作:
,([0-9]{3})([^\n]*)
http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1
答案 3 :(得分:0)
根据您的评论,这是您想要匹配的内容
2011-08-09 09:25:57,069 [9] Orchard.Environment.Extensions.ExtensionManager - 加载错误 扩展2011-08-09 09:25:57,493 [8] Orchard.Environment.Extensions.ExtensionManager - 加载错误 扩展
此表达式将匹配第一个捕获组中的日期和其余日期,直到下一个日期或直到第二个捕获组中字符串的结尾。
(\d{4}(?:-\d{2}){2})(.*?)(?=(?:\d{4}(?:-\d{2}){2}|$))