使用连字符作为正则表达式的字符串

时间:2013-05-20 13:48:28

标签: c# regex

我在开发了一个正则表达式,它检查日志文件中的特定模式。

字符串看起来像这样:

05-20-2013 15:57:09.334715 [del1-dhp-26330] Read 100 entries from syslog file test

我的正则表达式函数是

\d\d-\d\d-\d\d\d\d \d\d:\d\d:\d\d.\d\d\d\d\d\d [@"+agentName+"]"+" Read 100 entries from "+flatFileLogSourceName;

其中agent name和flatfilelogsource name将检索字符串中的相应值。

但是收到错误说[x-y]范围的顺序相反..这应该是代理名称,因为它包含连字符。

所以我基本上在寻找一种方法,它可以像@那样对\

这样的字符串转义连字符

2 个答案:

答案 0 :(得分:2)

对于您重新提到的错误消息,我认为"[@"+agentName+"]"应该像大多数正则表达式一样写成"\[@"+agentName+"\]",尽管我不知道C#的实现。

快速解释

方括号形成一个类,一种有效字符的集合以供匹配。这些类可以使用范围[0-9]来匹配十进制表示法中的数字,或[0-7]以八进制表示法匹配它们。并匹配匹配a,b,c,d或e的[a-e]等一系列字符。但范围不能以相反的顺序排列。因此[a-z]是有效范围,但[z-a]不是。要避免创建字符类,必须使用反斜杠

转义方括号

答案 1 :(得分:1)

\是正则表达式转义字符。

这应该有效:

"\d{2}\-\d{2}\-\d{4} \d{2}:\d{2}:\d{2}\.\d{6} \["+agentName+"\] Read 100 entries from "+flatFileLogSourceName

编辑:虽然看到这句话让我对你实际要求的内容感到困惑:

  

代理名称和flatfilelogsource名称将检索我   字符串中的相应值。

如果您尝试从正则表达式匹配中提取数据,这可以帮助您:http://www.regular-expressions.info/named.html