我想在java中的空白处分开一个句子。但在文本中它们是html标签,我不想在这里拆分。
因此,例如"hello <a>John Smith</a> hey ho"
应该拆分为:
hello
<a>John Smith</a>
hey
ho
我考虑过使用split并在javascript中找到一个正则表达式,但我无法将其转换为java 有没有更好的方法然后使用正则表达式拆分?
[编辑] 这是我可以转换的javascript正则表达式,但我想知道是否有比正则表达式更好的方法? https://stackoverflow.com/a/7552371/2170547
答案 0 :(得分:3)
首先,我不建议正则表达式解析任何形式的HTML,但如果你坚持,这就是你要做的:
您必须首先匹配所有html标记,然后在空格上进行拆分。正则表达式更容易做出你想要做的事情的逆转。
以下是一个实例:http://regex101.com/r/wX5hI4
希望这有帮助。
编辑: 以下是从网站中提取的生成的java代码:
String re = "(<a>.*?</a>)\\s*| ";
String str = "hello <a>John Smith</a> hey ho";
Pattern p = Pattern.compile(re);
Matcher m = p.matcher(str);
答案 1 :(得分:1)
这是一些实际工作的Java7代码http://ideone.com/PWv56h
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
String test = "testing 1 2 3 <a title=\"a demo\" href=\"\">testing 4 5 6</a> testing\t7\n8\r9 <br /><script src=\"blah\" />more text";
java.util.regex.Matcher m = java.util.regex.Pattern.compile("(<(?<tag>[A-Za-z]+)[^>]*?>[^<]*</\\k<tag>>)|(<[A-Za-z]+[^>]*?/>)|([^\\p{Space}]+)").matcher(test);
while(m.find())
System.out.println(m.group());
}
}
正则表达式匹配3个不同的组
如果HTML正确且HTML实体正确转义,则上述正则表达式匹配器应该可以正常工作。即使在凌乱的HTML中,它也会快速而且相当准确。
答案 2 :(得分:0)
试试这个... DEMO
(?<=</(a)>)|(?=<(a)>)