2014-01-08 4 views
0

У меня есть строка, как это ..Regexp и пользовательские теги

<mytag>one line</mytag><mytag>second line with other tag <color=red>this words are red</color></mytag><youtube>GY7IU5FU</youtube> 

Как я могу получить это ..

1 - (TAG) - mytag 
1 - (DATA) - one line 
2 - (TAG) - mytag 
2 - (DATA) - second line with other tag <color=red>this words is red</color> 
3 - (TAG) - youtube 
3 - (DATA) - GY7IU5FU 

Im пытается с этим, но не работает

<(.*).*?<\/?\1> 
+0

использовать синтаксический анализатор html – tenub

+0

Почему вы хотите использовать регулярное выражение? Это html. – mikea

+0

или просто используйте группы захвата с вашим регулярным выражением. быстрый поиск google для групп захвата java regex показывает [это] (http://www.javamex.com/tutorials/regular_expressions/capturing_groups.shtml#.Us1ymGRDsrg) – tenub

ответ

1

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

Вам нужен полноразмерный парсер. К счастью для вас, у SO есть необходимая вам информация here.

0

Как частичный ответ на вопрос, который может помочь вам начать работу, вот некоторые Java:

Pattern p = Pattern.compile("<[^<>]*?>"); 
Matcher m = p.matcher("<mytag>foo</mytag>"); 
if (m.find()){ 
    String str= m.group(0) 
} 

Этот фрагмент захватывает mytag в <mytag>foo</mytag>. Надеюсь это поможет.

0

Решение в питона (повторно модуль для регулярных выражений):

re.findall(r"<(mytag|youtube)>(.*?)</\1>",a) 

Output: 
[('mytag', 'one line'), 
('mytag', 'second line with other tag <color=red>this words are red</color>'), 
('youtube', 'GY7IU5FU')] 

Объяснение: Это регулярное выражение соответствует начало MyTag или YouTube тега, а затем текст внутри тега (в не жадный моды чтобы избежать ситуации, когда аб будет соответствовать аЬ как текст

Если вы хотите, чтобы соответствовать все теги верхнего уровня и содержимое затем использовать следующую строку: регулярное выражение.

<(.+)>(.*?)</\1> 
Смежные вопросы