Как восстановить скобки HTML, которые были заменены? - PullRequest
1 голос
/ 20 июня 2011

Я работаю с базой данных, содержание которой заменено угловыми скобками на символ ^.

например.

^b^some text^/b^

Может ли кто-нибудь порекомендовать решение c # для преобразования символа ^ обратно в соответствующую скобку, чтобы его можно было отображать в виде html? Я предполагаю, что какое-то регулярное выражение сделает работу ...?

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 20 июня 2011

Вы можете заменить каждый n'th ^ символ на >, где n - чётное, и <, где n - нечетное.

var html = "^b^some text^/b^";

var n = 0;
var result = Regex.Replace(html, "\\^", m => ((n++ % 2) == 0) ? "<" : ">");
// result == "<b>some text</b>"

Обратите внимание, что это работает только в том случае, если исходный код HTML содержит закрывающий символ > для каждого символа < (<p<b>... неверно) и что в исходном коде HTML не было символов ^ <b>2^5</b> плохо).

2 голосов
/ 20 июня 2011

Более сложным, но, возможно, более безопасным решением будет поиск определенных наборов символов, таких как ^ p, ^ img, ^ div и т. Д. И их аналогов, ^ / p ^, ^ / div ^, ^ / img ^ и т. д., и заменяя каждый из них специально.

Хотя это возможно, зависит от того, какие теги существуют в данных, и от того, сколько усилий вы готовы приложить, чтобы сделать это безопасно. Знаете ли вы, есть ли конечный набор тегов, которые были использованы? Был ли сгенерирован HTML, или есть вероятность, что кто-то отредактировал их вручную, что усложнило поиск по шаблону?

Может быть, вы могли бы сначала провести некоторый анализ, например, найти и перечислить различные случаи, когда встречается символ ^? О каком количестве данных мы говорим, и является ли он статическим или будет продолжать расти (включая проблему ^)?

1 голос
/ 20 июня 2011

Хитро, до такой степени, что невозможно сделать совершенно автоматически - если только вы не можете сделать некоторые очень удобные предположения об исходном HTML (что это небольшое подмножество всех возможных HTML, что было известно, что оно соответствует определенному предсказуемому узоры). Я думаю, в конце концов, придется вручную редактировать.

Сказав это, и извиняясь за то, что не включили какой-либо действительный код C #, вот как я мог бы подойти к нему.

Давайте пошагово разберемся с проблемой, где мы сначала преобразуем общие шаблоны. Цель состоит в том, чтобы после каждого шага уменьшать количество оставшихся символов ^.

Итак, во-первых, регулярное выражение заменяет множество очень распространенных буквенных паттернов

^p^ -> <p>
^div^ -> <div>
^/div^ -> <div>

и т.д..

Затем замените шаблоны, содержащие необязательный текст, например

^link[anything-except-^]^ -> <link[original-text]>

и так далее. Мой подход заключается в замене только ожидаемых шаблонов, и таким образом избегайте ложных совпадений. Затем выполняйте итерации с другими шаблонами, пока не останется ^ символов. Это требует много проверки данных и множества шаблонов. Это грубая сила, не умная, но ты идешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...