我有一个RTE文本格式如下:
<li> text </li>
<li> text </li>
<p> text </p>
<p> text </p>
<li> text </li>
<li> text </li>
这里的问题是,&#34; li&#34;标签没有包含在&#34; ul&#34;标签。我想用Java实现这一点,因为我正在编写一个迁移脚本。我在Jquery中找到了答案,但很难在Java中找到这样的解决方案。
注意:不确定它是否重要,但这是客户在Excel表格中为迁移提供的RTE文本。
以上文字的理想结果如下:
<ul>
<li> text </li>
<li> text </li>
</ul>
<p> text </p>
<p> text </p>
<ul>
<li> text </li>
<li> text </li>
</ul>
答案 0 :(得分:1)
如果您只是将其作为字符串取回,那么这是一个正则表达式解决方案应该起作用或至少作为一个良好的起点。
<li>
该模式会查找</li>
标记,这些标记之前没有<ul><li>
标记(忽略它们之间的任何空格),然后用开放的</li>
标记替换它们。
然后,它会查找任何<li>
标记后面跟</li></ul>
标记,并替换为import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main( String args[] ) {
// String to be scanned to find the pattern.
String input = "<li> text </li> <li> text </li> <p> text </p> <p> text </p><li> text<span>more test</span> </li><li> text </li>";
String pattern1 = "(?<!</li>\\s{0,100})(<li>)";
String replace1 = "<ul><li>";
String pattern2 = "</li>(?!\\s{0,100}<li>)";
String replace2 = "</li></ul>";
// Create a Pattern object
Pattern r1 = Pattern.compile(pattern1);
Pattern r2 = Pattern.compile(pattern2);
// Now create matcher object.
Matcher m1 = r1.matcher(input);
input = m1.replaceAll(replace1);
Matcher m2 = r2.matcher(input);
input = m2.replaceAll(replace2);
System.out.println(input);
}
}
标记
下面的完整代码,或here是一个实时示例
opt = tf.train.AdamOptimizer(args.lr)
grads = opt.compute_gradients(loss)
grads2 = [(tf.where(tf.is_nan(grad), tf.zeros(grad.shape), grad), var) for grad, var in grads]
opt_op = opt.apply_gradients(grads2)