2009-12-14 213 views
0

所以最後(經過幾天的調試)我發現了一個問題。它根本不在正則表達式中:/。它接縫,我修剪ekstra空白與正則表達式無法識別「 n」?

intput= Regex.Replace(input, "\\s+", " "); 

所以所有新的行被替換爲「」。笨!主持人,請刪除這個如果不需要!

我有正則表達式的標化一些文本,它看起來像這樣:

"(?<html>Ç)| 
(?<number>\\d+(?:[.]\\d+)?(?=[][ \f\n\r\t\v!?.,():;\"'„Ç]|$))| 
(?<other>(?:[^][Ç \f\n\r\t\v!?.,():;\"'„A-Za-zčćšđžČĆŠĐŽäöÖü][^ Ç\f\n\r\t\vA-Za-zčćšđžČĆŠĐŽäöÖü]*)?[^][ Ç\f\n\r\t\v!?.,():;\"'„A-Za-zčćšđžČĆŠĐŽäöÖü](?=[][!?.,():;\"'„]*(?:$|[ Ç\f\n\r\t\v])))| 
(?<word>(?:[^][ Ç\f\n\r\t\v!?.,():;\"'„][^ Ç\f\n\r\t\v]*)?[^][ Ç\f\n\r\t\v!?.,():;\"'„])| 
(?<punctuation>[][ \f\n\r\t\v!?.,():;\"'„])" 

問題是這一部分:(?<punctuation>[][ \f\n\r\t\v!?.,():;\"'„])。所以當我用輸入"\n\n"來解析文本時,它是按照標點符號進行分組的:" "," " - 換言之,空間和空間......我不知道爲什麼?

+2

不是您的行級別的正則表達式,例如,在Perl中? – bertolami 2009-12-14 11:08:21

+0

對不起......這不是很清楚......它將換行變成空格嗎?你想要它分組標點符號嗎?而當我在這個時候,你一直在寫什麼? – Kobi 2009-12-14 11:27:56

+1

這是否也發生在RegexOptions.Multiline選項打開和關閉? – 2009-12-14 11:33:47

回答

5

我可能是錯的,但你需要把字符串作爲字符串交給RegEx ...意味着你需要避開反斜槓。

... (?=[][ \\f\\n\\r\\t\\v!?.,():;\\" ... 

否則C#將用RegEx-Statement中的換行符替換\ n。

編輯:這也是possible to use literal strings,但需要用開始標記@(見馬丁的答案)。

+4

或者只是使用逐字字符串文字:'@「...」' – Joey 2009-12-14 11:14:54

+0

這裏可能不使用文字字符串嗎?例如var regex = @「」 – Mike 2009-12-14 11:16:18

+0

多行正則表達式,可能是一個逐字字符串* already *。 – Kobi 2009-12-14 11:17:06

2

如果你把一個@放在字符串的前面,你可以使用單個反斜槓並且可以識別換行符。

@"(?<html>Ç)| 
+0

謝謝,我試試這個。 – user231185 2009-12-14 21:56:19

0

RegexOptions.IgnorePatternWhiteSpace

更新:

確定[^]是正確的?除非是某種字符組(我從未使用過),否則將與.相同。 []也是如此。也許我之前並沒有使用RE的所有內容:p

+0

[^]]和[]]是正確的!我讀了[]如何在[]中包含] literal,它表示「]」必須是[]文字組中的第一個字面值。 (後不包括^) – user231185 2009-12-14 21:54:32

+0

RegexOptions.IgnorePatternWhitespace沒有幫助:/ 所以我不能找到我在哪裏讀它,但如果你想在文字[abc]列表中包括符號「]」,你必須先把它放在第一地方(我不能逃避那個文字)。所以[ab] c]]錯誤[ab \\] c]也是錯誤的。正確的方法是在文字組[] abc] [^] abc](如果它是一個nogation)開始之後將「]」放在第一位。這對我來說很好。因此在[] abc]文字是] a b c。 – user231185 2009-12-14 22:24:02

+0

謝謝未知,不知道:) – leppie 2009-12-15 05:47:30

相關問題