正则表达式匹配组之前的最后一场比赛

Regex match last match before group

我无法制作一个好的正则表达式来查找指定匹配之前管道字符 | 之间的最后内容。

我想在 |401 |.

之前找到 " 313.175,89-"(或 | 符号之间的任何内容)

|Posting text | Amount|BTC | | |Beginning balance | 0,00 | | | 2|29.07.2021|29.07.2021| 401 ARD DEP. PLN OPROC.: 0 OD: 29.07.2021 DO: | | 313.175,89-|401 | | | | | KAPITALU: 612313

我只有 \|.*?(?=\|401.\|) 但匹配换行符的所有内容。

您的正则表达式几乎就绪,但问题是您的正则表达式将从 第一个 管道匹配,因为 .*? 也匹配管道。

\|.*? 替换为 [^|]* 以仅匹配非管道:

[^|]*(?=\|401 \|)

live demo

这通过匹配任意数量的非竖线字符和后跟 |401 |.

的字符来实现

请注意字符 class 中的管道 而不是 必须转义,因为大多数字符在字符 [=38= 中使用时会失去其特殊含义] 管道就是其中之一。


要同时省略目标的 leading/trailing 空格,请使用 [^| ]*(?= *\|401 \|)

参见 live demo