我想要选择<h3>
和/h3> <
之间的所有文字。选择后,我喜欢用结果替换我的String的值。在以下示例中,结果应为基本信息
String test="<h3>Basic Information</h3> <div>";
test = test.replaceAll("<h3>(.*?)</h3>", "$1");
但目前结果是
基本信息&amp; lt; div&amp; gt;
答案 0 :(得分:4)
使用正则表达式,您可以:
String test="<h3>Basic Information</h3> <div>";
String repl = test.replaceFirst(".*<h3>([^&]+).*/h3> <.*", "$1");
//=> Basic Information
虽然您可以完全避免使用正则表达式,但也可以使用String
API来提取相同的文本。
或者,您可以使用此正则表达式进行匹配:
<h3>([^&]+).*/h3> <
使用Pattern
和Matches
API抓取捕获的第1组。
答案 1 :(得分:1)
试试这个:
Pattern pattern = Pattern.compile("<h3>(.*)<\\/h3>");
Matcher matcher = pattern.matcher("<h3>Basic Information</h3> <div>");
matcher.find();
StringBuffer sb = new StringBuffer();
matcher.appendReplacement(sb,"$1");
String result = sb.toString();
由于在appendTail
方法结束时调用了replaceFirst
方法,因此只能将其替换为第一个。匹配器将使用空替换未指定的组,使用值替换指定的组,当然还有非匹配位,因为没有匹配为他们创造,他们根本没有被取代。
如果是您的查询:
第0组:&lt; h3&gt;
第1组:基本信息
第0组:&lt; / h3&gt;
不匹配:&lt; div&gt;
这只是您可以使用匹配器执行的操作的一般示例。当然,如果你只想要特定的小组......那么只需使用:
matcher.group(1)