Regex для цитирования атрибутов XML без кавычек - PullRequest
2 голосов
/ 11 февраля 2010

Редактировать: 100% правильная теория заключается в том, что вы вообще не хотите этого делать. Однако я принял ответ, который помог больше всего.

Так что мне дают уродливый XML от клиента, который обещает это исправить. В то же время я должен убрать его сам. Я ищу регулярное выражение для использования в Java, чтобы добавить кавычки вокруг атрибутов без кавычек. Общий случай лучше, но пока это только один атрибут, который нарушен, поэтому регулярное выражение может конкретно ссылаться на "attr1". Значение атрибута неизвестно, поэтому я не могу включить его в поиск.

<tag attr1 = VARIABLETEXT>
<tag attr1 = "VARIABLETEXT">not quoted</tag>
<tag attr1 = VARIABLETEXT attr2 = "true">
<otherTag>buncha junk</otherTag>
<tag attr1 = "VARIABLETEXT">"quoted"</tag>

должно превратиться в

<tag attr1 = "VARIABLETEXT">
<tag attr1 = "VARIABLETEXT">not quoted</tag>
<tag attr1 = "VARIABLETEXT" attr2 = "true">
<otherTag>buncha junk</otherTag>
<tag attr1 = "VARIABLETEXT">"quoted"</tag>

РЕДАКТИРОВАТЬ: Большое спасибо за то, что сказали мне не делать то, что я пытаюсь сделать. Тем не менее, это не случайность, все идет в XML, где я столкнусь со всеми проблемами «не делай этого». Я прочитал другие темы. Я ищу конкретную помощь для конкретного взлома.

Ответы [ 2 ]

5 голосов
/ 11 февраля 2010

Не используйте регулярные выражения для исправления / анализа / обработки языков разметки. Читайте здесь, почему.

Используйте простительный синтаксический анализатор, такой как tidy , чтобы прочитать и исправить документ за несколько простых шагов. Существует библиотека Java (jtidy) , которую вы можете использовать.

2 голосов
/ 11 февраля 2010

ОК, учитывая ваши ограничения, вы можете:

Поиск

<tag attr1\s*=\s*([^" >]+)

и заменить на

<tag attr1 = "\1"

Итак, в Java это может быть (согласно RegexBuddy ):

String resultString = subjectString.replaceAll("<tag attr1\\s*=\\s*([^\" >]+)", "<tag attr1 = \"$1\"");

РЕДАКТИРОВАТЬ: Упрощенное регулярное выражение немного больше.

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