2011-10-28 107 views
2

几周前,我问了一个类似的问题,如何根据特定的子字符串拆分字符串。但是,我现在想要做一些有点不同的事情。我有一条线,看起来像这样(对格式的抱歉):正则表达式排除部分字符串拆分

我想要做的就是在所有换行\ r \ n序列中拆分此行。但是,如果在PA41线之后有PA42,我不想这样做。我希望PA41和后面的PA42线在同一条线上。我试过使用几个正则表达式无济于事。我期待的输出将看起来像这样:

这是我正在使用的正则表达式,但它不完成我正在寻找的。

string[] p = Regex.Split(parameterList[selectedIndex], @"[\r\n]+(?=PA41)"); 

如果您需要任何澄清,请随时询问。

回答

3

你试图积极先行,你要负一个。 (正保证了模式确实跟随,而负保证它不

(\\r\\n)(?!PA42) 

作品for me

+0

谢谢。出于某种原因,当我使用这个表达式时,除非使用@“(\ r \ n)(?! PA42)”,否则它实际上并不分裂。然而,它也将\ r \ n分成单独的行,而不是将它们保留在PA ##行结尾处。 – almostProgramming

+0

@almostProgramming:“\ r \ n”字符是字面意义上的'\',然后是'n'或'r'吗?还是他们回车换行?这将使模式有所不同,但我不知道你是否为了这个问题展示他们,或者他们是否是角色。 –

+0

他们实际上是回车和换行。对不起,我应该在问题中说清楚。 – almostProgramming

3
string[] splitArray = Regex.Split(subjectString, @"\\r\\n(?!PA42)"); 

这应该有效。它使用否定性前瞻断言来确保PA42不遵循\ r \ n序列。

说明:

@" 
\\   # Match the character “\” literally 
r   # Match the character “r” literally 
\\   # Match the character “\” literally 
n   # Match the character “n” literally 
(?!  # Assert that it is impossible to match the regex below starting at this position (negative lookahead) 
    PA42  # Match the characters “PA42” literally 
) 
" 
+0

谢谢你的快速回答。 – almostProgramming

+0

@almostProgramming没问题。为什么你不接受它,虽然我不明白:) – FailedDev

+0

如果我可以接受多个答案,我会的。 :) – almostProgramming