2009-12-14 2 views
0

поэтому в конце концов (после нескольких дней отладки) я нашел проблему. Он не находится в regex вообще: /. Это швы, что я был подрезка EKSTRA белых пространств сregex не может распознать « n»?

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

поэтому все новые линии заменяются «». Глупый! Модератор, пожалуйста, удалите это, если ненужно!

У меня есть регулярное выражение для tokenizing текст и выглядит следующим образом:

"(?<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!?.,():;\"'„]). Поэтому, когда im prsing текст с вводом "\n\n", он группируется в пунктуационных совпадениях: " "," " - другими словами, пространство и пространство ... и я не знаю почему?

+2

не является вашим регулярным выражением, работающим на линейном уровне, например. в perl? – bertolami

+0

Прошу прощения ... это не очень понятно ... это превращает новые строки в пробелы? Вы хотите, чтобы он группировал знаки препинания? И пока я нахожусь в этом, что это за '[' 'вы продолжаете писать? – Kobi

+1

это также происходит с параметром RegexOptions.Multiline включен и выключен? –

ответ

5

Я мог ошибаться, но вам нужно передать String как String в RegEx ... означает, что вам нужно избежать обратных косых черт.

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

Или иначе C# заменит \ n на строку в Реестре-заявлении.

Редактировать: Это также possible to use literal strings, но необходимо отметить с началом @ (см. Ответ Мартина).

+4

Или просто используйте дословные строковые литералы: '@" ... "' – Joey

+0

Невозможно использовать литальную строку здесь? например var regex = @ "" – Mike

+0

многострочное регулярное выражение, вероятно, строка verbatim * уже *. – Kobi

2

Если вы положили @ перед строкой, вы можете использовать одиночные обратные косые черты и разрывы линии будут распознаны.

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

спасибо, il попробуйте это. – user231185

0

Set RegexOptions.IgnorePatternWhiteSpace

Update:

Вы уверены, что [^] правильно? Если это не какая-то группа персонажей (которую я никогда не использовал), это будет то же самое, что и .. То же самое касается []. Возможно, я просто не использовал все RE раньше: p

+0

[^]] и []] правильно! Я читал о том, как включить] литерал в [], и он говорит, что «]» должен быть первым литералом в [] литеральной группе. (после нет, если включено ^) – user231185

+0

RegexOptions.IgnorePatternWhitespace не помогло:/ , поэтому я не могу найти, где я прочитал об этом, но если вы хотите включить символ «]» в список литералов [abc], u должен поставить его первым место (я не мог избежать этого буквального). поэтому [ab] c]] неверно [ab \\] c] неверно. Правильный путь - поставить «] на первое место после начала литеральной группы [] abc] [^] abc] (если это указание). Это работает отлично. Таким образом, в [] abc] литералах] a b c. – user231185

+0

Спасибо, неизвестно, не знал, что :) – leppie

Смежные вопросы