2010-12-15 2 views
1

У меня есть строка Java, которая выглядит как это, на самом деле XML тег:Нужна небольшая помощь по этому регулярному выражению

"article-idref="527710" group="no" height="267" href="pc011018.pct" id="pc011018" idref="169419" print-rights="yes" product="wborc" rights="licensed" type="photo" width="322" " 

Теперь я хочу, чтобы удалить статью-IDREF = «52770» сегмента, используя регулярное выражение, я придумал следующий:

trimedString.replaceAll("\\article-idref=.*?\"",""); 

, но это не похоже на работу, может кто-нибудь дать мне представление о том, где я неправильно в моем регулярном выражении? Мне нужно, чтобы это было представлено как String в моем классе Java, поэтому, вероятно, HTMLParser мне не поможет. Спасибо заранее!

+1

Похоже, вы вытащили эту строку из HTML-файла. Почему бы просто не использовать ваш синтаксический анализатор HTML, чтобы удалить этот конкретный атрибут, вместо того, чтобы его схватывать, повторно его использовать и набивать обратно? – 2010-12-15 21:06:17

+0

@ Anon, это фактически тег XML, и мне нужно использовать его только как строку в моем классе Java, но для цели представления я должен избавиться от этого arrtibute «article-idref». – Kevin 2010-12-15 21:07:41

+0

@Robert, для XML-массажа просто используйте трансформатор и пишите XSLT-фрагмент. – 2010-12-15 21:08:57

ответ

2

Попробуйте это:

trimedString.replaceAll("article-idref=\"[^\"]*\" *",""); 
1

Я исправил регулярное выражение, добавив кавычки и границу слова (чтобы предотвратить ложные совпадения). Кроме того, в случае, если вы не помните переназначить в строку после замены:

trimmedString = trimmedString.replaceAll("\\barticle-idref=\".*?\"", ""); 

Посмотри работать в ideone.

Также, поскольку это из XML-документа, было бы лучше использовать XML-синтаксический анализатор для извлечения правильных атрибутов вместо обычного выражения. Это связано с тем, что XML является довольно сложным форматом данных для правильного анализа. Пример в вашем вопросе достаточно прост. Однако регулярное выражение может разбить на более сложный случай, например документ, содержащий комментарии XML. Это может быть проблемой, если вы читаете данные из ненадежного источника.

0

, если вы уверены, что статья-IDREF всегда находится в начале попробуйте следующее:

// removes everything from the beginning to the first whitespace 
trimedString = trimedString.replaceFirst("^\\s",""); 

Обязательно присвоить результат trimedString снова, так как заменить делает не выравнивать строку, но возвращает другую строку.

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