删除Java字符串中给定模式的表行
Posted
技术标签:
【中文标题】删除Java字符串中给定模式的表行【英文标题】:Remove table rows for given pattern in Java String 【发布时间】:2018-09-10 17:55:31 【问题描述】:我想删除所有具有 N/A 的行,因为值是给定 html 代码(java 字符串)的最后一列。
请帮助我获取正确的正则表达式/模式代码以删除所有出现的情况:
<table class="overviewTable">
<tr>
<th colspan="6" class="header suite">
<div class="suiteLinks">
<a href="suite1_groups.html">Groups</a>
</div>
Test Automation
</th>
</tr>
<tr class="columnHeadings">
<td> </td>
<th>Duration</th>
<th>Passed</th>
<th>Skipped</th>
<th>Failed</th>
<th>Pass Rate</th>
</tr>
<tr class="test">
<td class="test">
<a href="suite1_test14_results.html">Test Xyz</a>
</td>
<td class="duration">
0.000s
</td>
<td class="zero number">0</td>
<td class="zero number">0</td>
<td class="zero number">0</td>
<td class="passRate">
N/A
</td>
</tr>
<tr class="test">
<td class="test">
<a href="suite1_test15_results.html">Test abc XYZ</a>
</td>
<td class="duration">
0.000s
</td>
<td class="zero number">0</td>
<td class="zero number">0</td>
<td class="zero number">0</td>
<td class="passRate">
N/A
</td>
</tr>
<tr class="test">
<td class="test">
<a href="suite1_test17_results.html">TestAbcSuccess</a>
</td>
<td class="duration">
77.582s
</td>
<td class="passed number">1</td>
<td class="zero number">0</td>
<td class="zero number">0</td>
<td class="passRate">
100%
</td>
</tr>
<tr class="suite">
<td colspan="2" class="totalLabel">Total</td>
<td class="passed number">1</td>
<td class="zero number">0</td>
<td class="zero number">0</td>
<td class="passRate suite">
100%
</td>
</tr>
</table>
这是Java+Selenium+TestNG自动化结果的index.html文件。
请帮助我获取正确的正则表达式/模式代码以从上述 HTML 中删除所有出现。
这些是我的试验:
1.
fullHtmlStr = fullHtmlStr.replaceAll("(?<=<tr class=\"test\">).*?(?=N/A\n </td>)", "");
2.
Pattern PATTERN = Pattern.compile("<tr class=\"test\">.*$.N/A\n </td>", Pattern.MULTILINE | Pattern.DOTALL );
Matcher m = PATTERN.matcher(fullHtmlStr);
if (m.find())
fullHtmlStr = m.replaceAll("");
(我对正则表达式一无所知,所以请原谅我以防万一这些完全错误)
附上截图:
更新前的截图:
更新后的截图:
【问题讨论】:
@mplungjan - 它与 selenium 无关,只是假设它是纯 Java 代码。 @DebanjanB - 我已经更新了上面的试验。谢谢。 @MukeshRajputremove all the rows having N/A
从哪里来?
@DebanjanB - 我在我的 java 代码中将上面附加的 HTML 代码读取为字符串,现在我想操作这个字符串,以便从字符串中删除所有包含 N/A 的行。
您确定只删除 所有包含 N/A 的行 就足以满足您的需要,因为 String 操作 HTML DOM i> 不会保留 DOM 结构?
【参考方案1】:
我不鼓励您使用正则表达式来执行此操作:正则表达式可用于匹配由字符组成的模式,但不能匹配由模式组成的模式。
要处理一个 HTML 字符串,您需要一个合适的解析器:如果它是 XHTML,您可以通过 DocumentBuilder 直接解析它。如果没有,则需要先通过开源库 Tidy 将其转换为 XHTML。
通过解析器,您将 HTML 字符串转换为 Document 对象,您将对其进行处理以遍历它、添加或删除任何节点。
【讨论】:
感谢@little-santi 的想法。【参考方案2】:根据@little-santi 的建议,我使用了jsoup html 解析器来操作代码,这是我的代码:
Document document = Jsoup.parse(strText);
for( org.jsoup.nodes.Element element : document.select("td:eq(5)"))
String content = element.getElementsMatchingOwnText("N/A").text();
if(content.equalsIgnoreCase("N/A"))
element = element.parent();
element.remove();
strText = document.toString();
【讨论】:
以上是关于删除Java字符串中给定模式的表行的主要内容,如果未能解决你的问题,请参考以下文章