Страница: 1 |
|
Вопрос: Regex
|
Добавлено: 13.10.08 04:06
|
|
Автор вопроса: BG(Алексей)
|
Нужно удалить и заменить теги в тексте.
Пример строки исходной строки:
\cf1 retSB.Insert(m.Index + st, "\\cf1 ")\cf0
С удалением все нормально. После удаления тегов через cleaned = Regex.Replace(cleaned, "(\\cf\d+\s)", "") получаю
retSB.Insert(m.Index + st, "\")
Но это не то, что мне нужно. Мне нужен результат следующего вида:
retSB.Insert(m.Index + st, "\cf1 ")
Как такое устроить?
Ответить
|
Номер ответа: 9 Автор ответа: BG(Алексей)
Вопросов: 26 Ответов: 295
|
Профиль | | #9
|
Добавлено: 16.10.08 01:57
|
Когда стандартный код, без тэгов, то все нормально. Но если присутствуют тэги, все ломается.
Причину я понял. Но решить не могу. Нужен Regex.
Берём строку(Пример строки взят из RichTextBox.)
- Dim InputText As String = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}{\colortbl ;\red0\green0\blue255;\red170\green0\blue0;\red0\green150\blue0;}\viewkind4\uc1\pard\cf1\lang1033\f0\fs20"
и теперь нужно привести её к такому виду
- "\{\\rtf1\\ansi\\deff0\{\\fonttbl\{\\f0\\fnil\\fcharset0 Courier New;\}\}\{\\colortbl ;\\red0\\green0\\blue255;\\red170\\green0\\blue0;\\red0\\green150\\blue0;\}\\viewkind4\\uc1\\d\\cf1\\lang1033\\f0\\fs20"
Мне нужно заэкранировать все тэги или метасимволы(как правильно?), которые находятся в двойных кавычках.
Данная строка взята как образец. Строки могут быть разные и содержать могут разные метасимволы. Нужно заэкранировать то, что может быть прочитанно не по своему жизненному значению.
Далее я форматирую строку и она получает такой вид
- \cf2 "\{\\rtf1\\ansi\\deff0\{\\fonttbl\{\\f0\\fnil\\fcharset0 Courier New;\}\}\{\\colortbl ;\\red0\\green0\\blue255;\\red170\\green0\\blue0;\\red0\\green150\\blue0;\}\\viewkind4\\uc1\\d\\cf1\\lang1033\\f0\\fs20"\cf0\par
Затем, со временем, мне нужно отредактировать строку. И вот здесь мне нужно привести строку к первоначальному виду. Убрать все, что экранировали, а так же все теги, которые я добавлял. Как убрать свои тэги, я знаю.
Вроде обьяснил.
Теги, которые я использую
\cf0, \cf1, \cf2, \cf3, \par, }
Ответить
|
Номер ответа: 10 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #10
|
Добавлено: 16.10.08 08:45
|
-
- using System;
- using System.Diagnostics;
- using System.Text.RegularExpressions;
-
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
- string testString = @"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}{\colortbl ;\red0\green0\blue255;\red170\green0\blue0;\red0\green150\blue0;}\viewkind4\uc1\pard\cf1\lang1033\f0\fs20";
- string pattern = @"\\|\{|\}";
- string replacement = @"\$0";
-
- // escape
- string result = Regex.Replace(testString, pattern, replacement);
- Debug.WriteLine(string.Format("=========== {0} ===========", "Escape metatags"));
- Debug.WriteLine(string.Format("INPUT:\t{0}", testString));
- Debug.WriteLine(string.Format("PATTERN:\t{0}", pattern));
- Debug.WriteLine(string.Format("OUTPUT:\t{0}", result));
-
- // unescape
- pattern = @"\\(?!\\)";
- replacement = string.Empty;
- Debug.WriteLine(string.Format("=========== {0} ===========", "Unescape metatags"));
- Debug.WriteLine(string.Format("INPUT:\t{0}", result));
- Debug.WriteLine(string.Format("PATTERN:\t{0}", pattern));
- result = Regex.Replace(result, pattern, replacement);
- Debug.WriteLine(string.Format("OUTPUT:\t{0}", result));
-
- //test
- Debug.Assert(testString.Equals(result),"Input and output string aren't equal");
-
- Console.ReadLine();//wait
- }
- }
- }
-
- // Result
- //=========== Escape metatags ===========
- //INPUT: {\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}{\colortbl ;\red0\green0\blue255;\red170\green0\blue0;\red0\green150\blue0;}\viewkind4\uc1\pard\cf1\lang1033\f0\fs20
- //PATTERN: \\|\{|\}
- //OUTPUT: \{\\rtf1\\ansi\\deff0\{\\fonttbl\{\\f0\\fnil\\fcharset0 Courier New;\}\}\{\\colortbl ;\\red0\\green0\\blue255;\\red170\\green0\\blue0;\\red0\\green150\\blue0;\}\\viewkind4\\uc1\\pard\\cf1\\lang1033\\f0\\fs20
- //=========== Unescape metatags ===========
- //INPUT: \{\\rtf1\\ansi\\deff0\{\\fonttbl\{\\f0\\fnil\\fcharset0 Courier New;\}\}\{\\colortbl ;\\red0\\green0\\blue255;\\red170\\green0\\blue0;\\red0\\green150\\blue0;\}\\viewkind4\\uc1\\pard\\cf1\\lang1033\\f0\\fs20
- //PATTERN: \\(?!\\)
- //OUTPUT: {\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}{\colortbl ;\red0\green0\blue255;\red170\green0\blue0;\red0\green150\blue0;}\viewkind4\uc1\pard\cf1\lang1033\f0\fs20
Ответить
|
Страница: 1 |
Поиск по форуму