2016-02-27 65 views
0

我不知道为什么这个正则表达式不匹配。也许你可以发现错误。为什么我的正则表达式在VB.net中不匹配

Dim rx2 As New Regex(">+ Client (.+) <+\n([^>]*)", RegexOptions.IgnoreCase) 
If rx2.IsMatch(fiContents) Then 
    Debug.Print("Matched") 
End If 

fiContents:

============ Computer 200xx; User Comp\nnnn; Oct, 07 2015 10:33 AM 
Print list: 9462 
>>>>> Client 9462 <<<<< 
Had a program exception; please check the error log 

我想匹配>>>>>客户9462 < < < < <捕捉后的数量,也都到另一个客户端编号。所以我的第一个捕获是“9462”,第二个是“有程序异常,请检查错误日志”。

它使用JavaScript设置完美地在Regex101.com。 VB.net有什么不同,它不匹配?

+0

什么是'(。+)'?你想匹配什么样的模式?给一些有效和无效的例子。 – 2016-02-27 04:28:17

+0

@noob'(。+)'匹配客户端号码。上面显示的fiContents显示我匹配的字符串。 –

+0

对于您应该使用的数字([0-9])*或(\ d)*。我会更喜欢使用第一个。 – 2016-02-27 04:33:05

回答

0

Noob指出/n可能是一个问题。看着它,我意识到该字符串包含一个CR和LF(当debug.Print>粘贴到Regex101.com时,它删除了CR)。由于正则表达式仅查找LF,因此不匹配。所以我通过使用>+ Client (.+) <+\r?\n?([^>]作为正则表达式来修复它。这是完美的。

+0

这就是为什么**你不能依靠[regex101.com](http://regex101.com)来测试.NET正则表达式**。使用[regexstorm.net](http://regexstorm.net/tester),其中linebreaks总是CRLF。 –

+0

@WiktorStribiżew感谢您的链接。但是如果我的字符串真的只有LF呢?这并不罕见。对我个人而言,这个问题是我的不支持的假设,'\ n'会包含'\ r \ n',这是不正确的。学过的知识。 –

+0

如果您不确定换行符的种类和类型,只需用'[\ r \ n] +'替换'\ n'。 –

相关问题