2015-10-08 3 views
-3

Я разбираю каждую строку файла (файл XML), и мне нужно найти path="this_is_my_path". После этого мне нужно извлечь, Что внутри \»Мне нужно, чтобы получить this_is_my_pathУдаление определенной части строки

Это то, что я делаю:..

String pattern = ".*path=\"(.*?)\""; 
Pattern p = Pattern.compile(pattern); 
Matcher m = p.matcher(the_text_file); 

while (m.find()) { 
     System.out.println(m.group().trim()); 
} 

После запуска этого я получаю это:

path="path_to_file" 
test="ui_test" path="path_to_other_file" 
..... 

я должен печатать это:

path_to_file 
path_to_other_file 
path_to_other_fileX 
path_to_other_fileW 
+0

Вы читаете XML-файл? – Tunaki

+0

Да. Я читаю XML-файл – Favolas

+2

Затем используйте синтаксический анализатор XML. Сделайте вашу жизнь легкой. – Tunaki

ответ

3

Если вам нужно использовать регулярное выражение, попробуйте с этим:

(?<=path=\")(.*?)(?=\") 

DEMO

Или вы можете использовать регулярные выражения, но без .* на begenning, потому что это соответствует также любой контент перед path= в одной строке. Затем получите значение по группе 1.

+0

Большое спасибо за вашу ценную информацию. Он работал – Favolas

2

Зачем изобретать колесо? Разве это не вызов или что-то еще?

http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

+0

Это должно быть опубликовано как комментарий, а не как ответ. –

+0

Или, по крайней мере, соответствующие данные добавлены в ответ. Ссылки могут устаревать. –

+0

Извините, буду знать в будущем, только новичок в SO. –

2

Один должны действительно попытаться собрать много причин, почему с помощью регулярного выражения является недостаточным для получения чего-либо из надежно из файла XML, даже если это «что-то» просто ничтожный атрибут, например, path и его (строковое) значение. Простой шаблон, такой как "path=\"(.*?)\"", обречен на провал из-за наименьшего количества свободы, которое спецификация XML оставляет для написания юридического XML и многое другое.

  • Пробег, включая разрывы строк, может происходить до и после знака равенства.
  • Апоптопы могут использоваться вместо кавычек.
  • Любой символ может быть записан как числовой или именованный объект.
  • Строка может быть частью значения элемента или атрибута.
  • Строка может встречаться в комментарии XML.
  • XML-файл может быть записан в кодировке, которая не учитывает наивное чтение в текстовом файле ванили; поэтому данные могут быть мусором.

Итак, для записи: Я настоятельно рекомендую использовать преобразование XSLT для извлечения желаемых значений атрибута. Для этого требуется очень простой шаблон. Использование анализатора XML требует больше строк кодов, но оно одинаково надежно.

И вот код Java, который я категорически не рекомендую использовать, он просто охватывает два из упомянутых выше пунктов.

String theText = ...; 
String pattern = "\\bpath\\s*=\\s*(\"(.*?)\"|'(.*?)')"; 
Pattern p = Pattern.compile(pattern); 
Matcher m = p.matcher(theText); 
while (m.find()) { 
    System.out.println(m.group(1).trim()); 
} 

(А вы заметили границу слова предшествующей path? Просто еще один шанс пойти не так с этим подходом.)

+0

Спасибо за это полезное объяснение – Favolas

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