regex 正则表达式,用于获取由第二个模式封装的括号之间的所有文本

iyfjxgzm  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(88)

我需要一个正则表达式,它将获得括号中的所有文本,记住所有内容都由单词开始和字符----封装在最后。
输入示例:

BEGIN       ) Tj\nET37.66 533 Td\n( Td\n(I NEED THIS TEXT      ) Tj\nET\nBT\n37.334 Td\n(AND ALSO NEED THIS TEXT         ) Tj\nET\nBT\n37.55 Td\n(------------

预期匹配项:

I NEED THIS TEXT
AND ALSO NEED THIS TEXT

我已经对外部模式做了一些类似(?<=BEGIN).*(?=\(--)的操作,但是我不知道如何在括号中得到所有文本。

bmp9r5qi

bmp9r5qi1#

有了Python的PyPi正则表达式库,你可以使用

(?s)(?:\G(?!^)\)|BEGIN)(?:(?!\(--).)*?\((?!--)\K[^()]*

请参阅regex demo

  • 详细数据 *:
  • (?s)-一个DOTALL内联修饰符,使.匹配换行符
  • (?:\G(?!^)\)|BEGIN)-BEGIN或上一次成功匹配的结尾,紧接着)
  • (?:(?!\(--).)*?-不启动(--字符序列的任何字符,零个或多个但出现次数尽可能少
  • 一个\(字符
  • (?!--)-紧接着(之后,不应该有--
  • \K-匹配重置运算符:之前匹配的内容将从整个匹配内存缓冲区中丢弃
  • [^()]*-除()之外的零个或多个字符
j2cgzkjk

j2cgzkjk2#

试试看:

\(((?:(?!BEGIN).)*?)\)(?=.*---)

Regex demo.

  • \(((?:(?!BEGIN).)*?)\)-匹配( )之间的所有内容,但不匹配BEGIN
  • (?=.*---)-.*---必须跟在此匹配之后

相关问题