我正在尝试匹配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
答案 0 :(得分:1)
第二个示例在DRRAIN中具有DR。您可以在DR
之前添加换行符,也可以在DR\b
之后添加单词边界,以防止成为较大单词的一部分:
(?<=(?:AM|PM))[\s\S]*?(?=\nDR)
^^
但是也可以将换行符移到后面的积极位置:
(?<=(?:AM|PM)\n).*(?=\nDR\b)
您还可能在AM后面加上换行符,在捕获组中捕获下一行,然后再匹配换行符和DR:
AM\n(.*)\nDR
答案 1 :(得分:0)
This RegEx可以通过在目标行所在的位置创建一个组($1
)来帮助您实现这一目标。
AM\n(.+)\nDR
另一种方法是直接定位第二行,例如this RegEx
[A-Z]{3}\s[A-Z]+\/[A-Z]+.+
您还可以使用组()
并使用$1
进行呼叫:
([A-Z]{3}\s[A-Z]+\/[A-Z]+.+)
This RegEx通过向模式添加其他边界来创建一组:
([A-Z]{3}\s[A-Z]+\/[A-Z,]+\s[A-Z,\/]+)