首页 > 解决方案 > 如何使用正则表达式通过第 k 行获得第 j 个?

问题描述

是否有正则表达式来提取行范围,例如仅例如第 4 到第 6 行(但正则表达式应该是通用的,在某些时候我将更改需要参数化的行),下面应该返回

<edgeData file="e1det_-143547931#1_1-results-aggregated.xml" id="e1det_-143547931#1_1"/>
    <edgeData file="e1det_143547931#0_0-results-aggregated.xml" id="e1det_143547931#0_0"/>
    <edgeData file="e1det_143547931#0_1-results-aggregated.xml" id="e1det_143547931#0_1"/>

完整数据

<?xml version="1.0" ?>
<additional>
    <edgeData file="e1det_-143547931#1_0-results-aggregated.xml" id="e1det_-143547931#1_0"/>
    <edgeData file="e1det_-143547931#1_1-results-aggregated.xml" id="e1det_-143547931#1_1"/>
    <edgeData file="e1det_143547931#0_0-results-aggregated.xml" id="e1det_143547931#0_0"/>
    <edgeData file="e1det_143547931#0_1-results-aggregated.xml" id="e1det_143547931#0_1"/>
    <edgeData file="e1det_143551389#1_0-results-aggregated.xml" id="e1det_143551389#1_0"/>
    <edgeData file="e1det_143551389#1_1-results-aggregated.xml" id="e1det_143551389#1_1"/>
    <edgeData file="e1det_-143547931#2_0-results-aggregated.xml" id="e1det_-143547931#2_0"/>
    <edgeData file="e1det_-143547931#2_1-results-aggregated.xml" id="e1det_-143547931#2_1"/>
    <edgeData file="e1det_143547931#1_0-results-aggregated.xml" id="e1det_143547931#1_0"/>
    <edgeData file="e1det_143547931#1_1-results-aggregated.xml" id="e1det_143547931#1_1"/>
    <edgeData file="e1det_143553082#1_0-results-aggregated.xml" id="e1det_143553082#1_0"/>
    <edgeData file="e1det_143553082#1_1-results-aggregated.xml" id="e1det_143553082#1_1"/>
    <edgeData file="e1det_-143551389#1_0-results-aggregated.xml" id="e1det_-143551389#1_0"/>
    <edgeData file="e1det_-143551389#1_1-results-aggregated.xml" id="e1det_-143551389#1_1"/>
    <edgeData file="e1det_143551389#0_0-results-aggregated.xml" id="e1det_143551389#0_0"/>
    <edgeData file="e1det_143551389#0_1-results-aggregated.xml" id="e1det_143551389#0_1"/>
    <edgeData file="e1det_348320661#1_0-results-aggregated.xml" id="e1det_348320661#1_0"/>
    <edgeData file="e1det_348320661#1_1-results-aggregated.xml" id="e1det_348320661#1_1"/>
    <edgeData file="e1det_-143553082#1_0-results-aggregated.xml" id="e1det_-143553082#1_0"/>
    <edgeData file="e1det_-143553082#1_1-results-aggregated.xml" id="e1det_-143553082#1_1"/>
    <edgeData file="e1det_-348320661#1_0-results-aggregated.xml" id="e1det_-348320661#1_0"/>
    <edgeData file="e1det_-348320661#1_1-results-aggregated.xml" id="e1det_-348320661#1_1"/>
    <edgeData file="e1det_143553082#0_0-results-aggregated.xml" id="e1det_143553082#0_0"/>
    <edgeData file="e1det_143553082#0_1-results-aggregated.xml" id="e1det_143553082#0_1"/>
    <edgeData file="e1det_348320661#0_0-results-aggregated.xml" id="e1det_348320661#0_0"/>
    <edgeData file="e1det_348320661#0_1-results-aggregated.xml" id="e1det_348320661#0_1"/>
</additional>

标签: regex

解决方案


这是一个正则表达式模式,它将任意匹配第 4 到第 6 行,包括一些输入:

(?:.*\n){3}(.*\n.*\n.*\n)

或者,也许在记事本++

(?:.*\R){3}(.*\R.*\R.*\R)

此模式在不捕获前三行的情况下使用,然后在捕获组中捕获接下来的 3 行。

演示

请注意,您通常不应使用正则表达式来解析 XML 内容。但是,就您而言,由于您只想提取整行,而不考虑嵌套标签,因此应该没有问题。


推荐阅读