承诺,我的正则表达式问题有一段时间了。..真的。
我在不应该的情况下以某种方式将换行符添加到某些匹配项中,并且我确定这是我误解的内容,或者,我得到的数据不是我所期望的。(这是可能的..!)
我定义了一个正则表达式:
new Regex(@"^\s*[0-9]{4}[A-Z]{2}[\s\*]\s*(?<token>.*?)\-(?<value>.*?)$", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
我得到的文档/字符串被格式化为偶尔出现的行,例如:
0000AA Token1 - Value
0000AA Token2 - Value
0000AA Token3 - Value
0000AA Another Tok- Value
当我像这样按顺序获取所有令牌时,上面的正则表达式效果很好。我得到四场比赛:
Match# <token> <value>
1 Token1 Value
2 Token2 Value
3 Token3 Value
4 Another Tok Value
这很好。但是,有时用户会向我发送一个文件,其中令牌偶尔会丢失行,例如:
0000AA Token1 - Value
0000AA Token2 - Value
0000AA Token3 - Value
0000AA
0000AA Another Tok- Value
发生这种情况时,我的正则表达式会给我以下值:
Match# <token> <value>
1 Token1 Value
2 Token2 Value
3 Token3 Value
4 0000AA Another Tok Value
我知道为什么,它与 #4 的标记匹配,从它上面的行开始。但是,当我将 'token' 分组更改为 时(?<token>[^\n]*?)
,我仍然在 'token' 中获得相同的值。
我觉得我错过了一些明显的东西,因为如果 . 在不应该匹配换行符的时候匹配换行符,比我更多的人会因为它而引起骚动。我检查了传入的字符串 - 换行符 ARE\n
和 not \r\n
,但想知道是否还有其他问题。
再次干杯 - 迈克。