2010-01-29 5 views
4

Так что у меня есть некоторые HTML с помощью тега изображений, как это:нужно регулярное выражение, чтобы избавиться от скобок в HTML-тег изображения файла

<p> (1) some image is below: 
<img src="/somwhere/filename_(1).jpg"> 
</p> 

Я хочу регулярное выражение, которое будет просто избавиться от скобки в имя файла, так что мой html будет выглядеть так:

<p> (1) some image is below: 
<img src="/somwhere/filename_1.jpg"> 
</p> 

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

Я буду вечно благодарен и отправлю вам очень приятную карму. :)

+0

Я не вижу разницы между до и после. Это делает регулярное выражение очень легким ... –

+0

Пересматриваете ли вы весь документ html, фрагменты документа или что? – RedDeckWins

+0

Не это снова ... – Aaronaught

ответ

1

Я подозреваю, что ваша работа будет намного проще, если вы использовали HTML Agility, что может помочь вам сделать это, вместо того, чтобы реджикс судить по ответам, это значительно облегчит вам анализ HTML-кода, делать.

Надеюсь, что это поможет, С уважением, Том.

+0

Вот что я в итоге сделал. RegEx просто не работал, и часть этого может быть связана с тем, что мне пришлось делать это через стороннюю библиотеку.Вместо этого я просто захватил все записи, в которых был html, перекачивал его в HtmlAgility, удалял мусор из изображения, а также теги привязки, и все было хорошо. Спасибо всем. – fregas

0

В этом простом случае, вы могли бы просто использовать string.Replace, например:

string imgFilename = "/somewhere/image_(1).jpg"; 
imgFilename = imgFilename.Replace("(", "").Replace(")", ""); 

Или вам нужно регулярное выражение для замены всего тега внутри HTML строки?

+0

Мне нужно избегать замены parentheis в теге html (другие теги, текст и т. Д.) И ТОЛЬКО удалять круглые скобки, когда он находится внутри атрибута src . – fregas

+0

Regex не может выполнить эту задачу. Вам нужно будет использовать парсер HTML. – bobince

1

Это (довольно плотный) регулярное выражение должно сделать:

string s = Regex.Replace(input, @"(<img\s+[^>]*src=""[^""]*)\((\d+)\)([^""]*""[^>]*>)", "$1$2$3"); 
0
Regex.Replace(some_input, @"(?<=<\s*img\s*src\s*=\s*""[^""]*?)(?:\(|\))(?=[^""]*?""\s*\/?\s*?>)", ""); 

Находит ( или ) предшествует <img src =" и, возможно, текст (с любой комбинацией пробелов, хотя я не включил символ новой строки) , а затем дополнительный текст и "> или "/>, снова с любой комбинацией пробелов и заменяет их ничтожеством.

1

Nick's solution прекрасно, если имена файлов всегда соответствуют этому формату, но это один соответствует любому скобке, где-нибудь в атрибуте:

s = Regex.Replace(@"(?i)(?<=<img\s+[^>]*\bsrc\s*=\s*""[^""]*)[()]", ""); 

просмотр назад гарантирует, что совпадение происходит внутри атрибут img тега src , Он предполагает, что атрибут заключен в двойные кавычки (кавычки); если вам нужно разрешить одиночные кавычки (апострофы) или вообще не кавычки, регулярное выражение становится намного сложнее. Я отправлю это, если вам это нужно.

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