我有一个像这样的字符串..
<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>
答案 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>