2009-12-14 170 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

相关问题