正则表达式和自定义标签

时间:2014-01-08 15:36:49

标签: java android regex

我有一个像这样的字符串..

<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

我正在尝试这个但不能正常工作

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

3 个答案:

答案 0 :(得分:1)

从一点经验来看,正则表达式根本不适用于重型解析。 HTML属于该类别。

你需要一个完整的解析器。幸运的是,SO拥有您需要的信息here

答案 1 :(得分: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>。希望这可以帮助。

答案 2 :(得分:0)

python中的解决方案(正则表达式的re模块):

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标记的开头,后跟标记内的文本(以非贪婪的方式)以避免出现这种情况 ab会将ab与文本匹配。

如果要匹配所有顶级标记和内容,请使用以下正则表达式字符串:

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