Как заменить escape-символы в регулярных выражениях? - PullRequest
1 голос
/ 28 октября 2009

Я снова ударился о стену.

Как заменить escape-символы с помощью регулярных выражений? Если символ табуляции (\ t) встречается более двух раз, я хочу заменить эти два или более вхождений на один \ t. Например, если приходит \ t \ t \ t, я хочу заменить его только на \ t. Как это сделать?

У меня возникла еще одна проблема, связанная с чтением текстового файла и применением к нему регулярных выражений.

Я использую C # для чтения текстового файла и для регулярных выражений. Когда я открываю текстовый файл (файл с расширением txt), я получаю нормальный вид файла. Но когда я читаю тот же файл с помощью «textReader» и сохраняю его в строку, я получаю текст примерно так:

O K \ t \ t \ t \ t \ t \ tEmail:
k.o@gmail.com \ rТелефон: + 91
992 \ t \ r \ r \ краткий обзор опыта
Бизнес-аналитика и данные
склад конструктор с более чем 6
многолетний опыт работы в OLAP
Проект. Технологии \ rВнизу
список важных программных продуктов
и инструменты, с которыми я работал
с. \ г \ rSoftware
Продукты \ г \ а \ г \ aOperating
Системы: \ rWINDOWS NT, WINDOWS 2000,
UNIX \ rDatabase Management
Системы: \ rOracle 8i, Oracle 9i, Oracle
10g, SQL-Server 7.0, DB2 \ rSoftware
Пакеты: \ rVSS, ER Win, M1 \ rFourth
Язык генерации: \ rPL / SQL,
SQL * PLUS \ rTools &
Технологии: \ ROracle Warehouse
Builder 10.1.0.4.0, ORACLE 9i AS,
ORACLE Discoverer Отчеты Стадия данных
8.0, Fast Track 8.5, DB @ Cube, JavaScript, JSP, JDEV, BI BEANS, ASP,
ASP.NET, Ab
Initio \ г \ г \ а \ г \ а \ v \ г \ г \ fAssignments \ rThe
детали различных заданий
что я обработал, перечислены здесь,
в хронологическом порядке
заказ. \ r \ rName \ r \ aКаждые данные Dennison
Складирование \ г \ а \ г \ aClient \ г \ aAvery
Деннисон, он бросает вызов в проекте
должен кормить EDW из существующих
склады с данными в
агрегированный
level. \ r \ a \ r \ a \ r \ rName \ r \ aAOL BI
(Omniture) обряд команды. Проектирование,
кодирование и тестирование вместе с
координация с выездной командой.
\ r \ a \ r \ aTools & Technologies \ r \ aUnix
Платформа, Oracle 10g, Py. Не только
поставляя правильное требование, но
также производительность должна быть в
приемлемая * * тысяча пятьдесят-один Диапазон. \ г \ а \ г \ а \ г \ г \ г \ г \ г \ г \ г \ г \ г \ г \ г \ RNAME \ г \ aAIW
События (ABSA) \ r \ a \ r \ aClient \ r \ aABSA,
Южная Африка \ r \ a \ r \ aP

Т.е. все экранирующие символы, такие как \ s, \ r, \ f, видны. Из-за этого регулярное выражение, которое работает с обычным текстом, не работает, когда я читаю тот же текст в строковую переменную.

Кто-нибудь знает, как решить эту проблему?

Спасибо

У меня есть еще один запрос. Я хочу сопоставить текст в конце строки. Я пытался использовать $ для этого. Например, чтобы соответствовать тексту, оканчивающемуся на «присваивание», я использовал регулярное выражение $. Он работал с обычным текстом. Но когда я запускаю этот regx для текста, переданного streamreader, это регулярное выражение не работает. Программа чтения потоковых данных выдает строки типа «Назначения» \ r \ r \ f. Как сопоставить конец строки или начало строки с этим видом текста?

Ответы [ 4 ]

2 голосов
/ 28 октября 2009
/\t{2,}/\t/

заменяет две или более вкладок одним символом.

1 голос
/ 28 октября 2009

Для символа табуляции используйте что-то вроде этого:

/(\t)*/\1/g
  1. Создайте группу с одним символом (символ табуляции) и максимально сопоставьте его.
  2. Заменить полное совпадение на один символ
  3. (Global) использовать шаблон для полного текста.

Тогда вы можете использовать то же выражение для других экранированных символов, которые вы хотите заменить.

1 голос
/ 28 октября 2009

Вы можете заменить \\t\\t\\t на \\t{3}

1 голос
/ 28 октября 2009

Вы пытаетесь сопоставить строку "\r", верно? Для этого вам нужно будет убежать от символа побега:

"(\\r)*"

Это выражение будет соответствовать "\r" любое количество раз. Это работает, потому что "\\" уходит в буквальный "\". Вы можете применить ту же идею к совпадению "\t".

...