使用正则表达式提取一组数字 and/or 空行
Using a regex to extract a set of numbers and/or blank lines
我正在使用 PCRE 构建一个正则表达式来处理文本以从一组文本行中提取一组数字(这些行是通过使用 XPATH 解析 HTML 生成的,但问题不取决于那)。如果所需的数字不存在,我需要 return 一个空行。
我在 Drupal 中使用一个名为 Feeds Tamper 的模块,它提供一组有限的选项来修改内容——包括基于 PCRE(而非 PCRE2)的 Regex 查找和替换。我可以选择执行一系列正则表达式查找和替换 and/or 简单的查找和替换。
输入采用以下格式:
Text A Location1 More text q=1,2)" Even more text
Text B
Text C Location1 More text q=3,4)" Even more text
Text D
可以有任意数量的行,包括和不包括我要提取的数字;最后一行可能有也可能没有数字;我需要处理所有行并最终每行得到一个结果并且没有额外的结果。然后将结果替换为捕获组。
我的搜索正则表达式目前看起来像
.*?Location1.*?q=(.*?),(.*?)".*?(\r|$)|.*?(\r|$)
我的替代者像
\1|
但是(参见 regex101.com)这给出了
这样的结果
1||
||
3||
||
||
预期输出是:
1|
|
3|
|
即在末尾有一个额外的行不对应于输入行,并且在每行的末尾有一个额外的管道字符。
如果我用
.*?Location1.*?q=(.*?),(.*?)".*?\r|.*?\r
最后一行被省略所以我得到:
1|
|
3|
如果我不添加管道 |在替换结束时,我得到了具有预期内容(数字或空白)的正确行数,但是一旦我在替换结束时添加了一些内容,我就会得到一个额外的行,并且被替换的字符会加倍。
我的正则表达式需要更改什么?为什么?
像这样:
^(?:.*Location1.*?q=(\d+),(\d+))?.*$
首先它匹配行首,后面可以选择 "required" Location
和 q=
部分并捕获数字。最后它匹配任何东西直到最后。
我正在使用 PCRE 构建一个正则表达式来处理文本以从一组文本行中提取一组数字(这些行是通过使用 XPATH 解析 HTML 生成的,但问题不取决于那)。如果所需的数字不存在,我需要 return 一个空行。
我在 Drupal 中使用一个名为 Feeds Tamper 的模块,它提供一组有限的选项来修改内容——包括基于 PCRE(而非 PCRE2)的 Regex 查找和替换。我可以选择执行一系列正则表达式查找和替换 and/or 简单的查找和替换。
输入采用以下格式:
Text A Location1 More text q=1,2)" Even more text
Text B
Text C Location1 More text q=3,4)" Even more text
Text D
可以有任意数量的行,包括和不包括我要提取的数字;最后一行可能有也可能没有数字;我需要处理所有行并最终每行得到一个结果并且没有额外的结果。然后将结果替换为捕获组。
我的搜索正则表达式目前看起来像
.*?Location1.*?q=(.*?),(.*?)".*?(\r|$)|.*?(\r|$)
我的替代者像
\1|
但是(参见 regex101.com)这给出了
这样的结果1||
||
3||
||
||
预期输出是:
1|
|
3|
|
即在末尾有一个额外的行不对应于输入行,并且在每行的末尾有一个额外的管道字符。
如果我用
.*?Location1.*?q=(.*?),(.*?)".*?\r|.*?\r
最后一行被省略所以我得到:
1|
|
3|
如果我不添加管道 |在替换结束时,我得到了具有预期内容(数字或空白)的正确行数,但是一旦我在替换结束时添加了一些内容,我就会得到一个额外的行,并且被替换的字符会加倍。
我的正则表达式需要更改什么?为什么?
像这样:
^(?:.*Location1.*?q=(\d+),(\d+))?.*$
首先它匹配行首,后面可以选择 "required" Location
和 q=
部分并捕获数字。最后它匹配任何东西直到最后。