匹配一行结束后和另一行开始前的所有内容

时间:2019-04-22 14:10:08

标签: regex

我正在尝试匹配2个单词之间的所有字符  1. AM在行尾  2.在一行的开头DR

Date:11/18/2016:9:39 AM
NIP CR/JUPITER, WHITE/GIN
DR Size:1200mb

具有预期的结果-> NIP CR/JUPITER, WHITE/GIN

我可以使用lookbehind和lookahead (?<=(?:AM|PM))[\s\S]*?(?=DR)的组合来完成此操作,但是此正则表达式不适用于以下某些情况

Date:11/18/2016:9:39 AM
NIP CR/DRAIN, WHITE/GIN
DR Size:1200mb

2 个答案:

答案 0 :(得分:1)

第二个示例在DRRAIN中具有DR。您可以在DR之前添加换行符,也可以在DR\b之后添加单词边界,以防止成为较大单词的一部分:

(?<=(?:AM|PM))[\s\S]*?(?=\nDR)
                         ^^

Regex demo

但是也可以将换行符移到后面的积极位置:

(?<=(?:AM|PM)\n).*(?=\nDR\b)

Regex demo

您还可能在AM后面加上换行符,在捕获组中捕获下一行,然后再匹配换行符和DR:

AM\n(.*)\nDR

Regex demo

答案 1 :(得分:0)

RegEx 1

This RegEx可以通过在目标行所在的位置创建一个组($1)来帮助您实现这一目标。

AM\n(.+)\nDR

enter image description here

RegEx 2

另一种方法是直接定位第二行,例如this RegEx

[A-Z]{3}\s[A-Z]+\/[A-Z]+.+ 

enter image description here

您还可以使用组()并使用$1进行呼叫:

([A-Z]{3}\s[A-Z]+\/[A-Z]+.+) 

RegEx 3

This RegEx通过向模式添加其他边界来创建一组:

([A-Z]{3}\s[A-Z]+\/[A-Z,]+\s[A-Z,\/]+)

enter image description here