如何用正则匹配含指定字符串的HTML表格<tr>完整行?
匹配包含指定字符串的完整行的正则表达式
我通过Jenkins调用Confluence API拿到一段HTML表格内容,需要精准匹配里面包含“what I’m searching”的完整<tr>行,要把从<tr>开头到对应</tr>结尾的整段内容抓出来。
可用正则表达式
开启单行模式(让.能匹配换行)后,使用下面的正则:
(?s)<tr>.*?what I’m searching.*?</td>\s*</tr>
表达式解释
(?s):单行模式修饰符,确保.可以匹配换行符,适配HTML中的换行结构<tr>:匹配目标行的起始标签.*?:非贪婪匹配任意字符,避免过度匹配到其他<tr>行what I’m searching:指定的匹配关键词,精准定位目标行.*?</td>\s*</tr>:继续非贪婪匹配,直到找到该行末尾的</td>和</tr>,\s*兼容标签间的空格、换行等空白字符
Jenkins Pipeline中使用示例(Groovy)
如果在Jenkins流水线里用,参考这段代码:
// 假设htmlContent是从Confluence API获取到的HTML内容 def htmlContent = getConfluencePageHtml() def targetPattern = /(?s)<tr>.*?what I’m searching.*?</td>\s*</tr>/ def matcher = htmlContent =~ targetPattern if (matcher.find()) { def targetTrLine = matcher.group() // 在这里对匹配到的<tr>内容进行更新操作 println("匹配到的目标行:\n${targetTrLine}") }
匹配结果
针对你提供的HTML内容,这个正则会准确捕获以下内容:
<tr> <td colspan="1">what I’m searching</td> <td colspan="1">2</td> <td colspan="1"> <div class="content-wrapper"><p><time datetime="2022-07-25" /> </p></div> </td> </tr>
内容的提问来源于stack exchange,提问作者mattobob
相关产品推荐
相关产品推荐

