在 Notepad++ 中为两个正则表达式模式之间的行添加书签,而不包含模式本身

问题描述 投票:0回答:1

我有一个列表,这是一个示例片段:

Newii
27,807,147
Supd
26,518,465
Ns.
26,175,538
Mai
24,930,812
Gas
0623,901,055
TEim
20,213,631
Tes
GrV
18,968,412
Mytyttyst
y
htththt
hyhyh
October 2013
/////////////////////////

我想为

18,968,412
October 2013
之间的行添加书签,而不包括这些行本身。以下正则表达式非常适合匹配行:

^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)[\s\S]+?^\h*\S.*(?=\R+/{24})

此正则表达式将

[\s\S]+?
放在
^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)
^\h*\S.*(?=\R+/{24})
之间。然而,问题是它还为图案线本身添加了书签。

应用“书签”后的输出如下:

18,968,412
Mytyttyst
y
htththt
hyhyh
October 2013

我只想为两个图案之间的线条添加书签。例如,在上面的列表中,应添加书签的行是:

Mytyttyst
y
htththt
hyhyh

任何人都可以帮我修改正则表达式,以便它只为模式之间的线添加书签,而不包括模式线本身吗?

请注意,我尝试遵循正则表达式,但它们也不起作用!

(?<=^\d+(?:,\d+)*$\R)[^\R]*(\R(?!^\d+(?:,\d+)*$|\h*\S.*(?=\R/{24}))[^R]*)*(?=\R^\h*\S.*(?=\R/{24}))
(?<=^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)\R)([\s\S]*?)(?=\R^\h*\S.*(?=\R+/{24}))
(?<=^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$)\R)[\s\S]*?(?=\R^\h*\S.*(?=\R+/{24}))
(?<=^\d+(?:,\d+)*$(?=(?:\R(?!\d+(?:,\d+)*$).*)*\R/{3,}$))[\s\S]*?(?=^\h*\S.*(?=\R+/{24}))
regex notepad++
1个回答
0
投票

你可以使用

^\d+(?:,\d+)*\R(?=(?:(?!\d+(?:,\d+)*$).*\R)*/{3,}$)\K[\s\S]*?(?=\R.*\R/{3,}$)

请参阅 正则表达式演示

详情

  • ^\d+(?:,\d+)*\R(?=(?:(?!\d+(?:,\d+)*$).*\R)*/{3,}$)
    - 匹配
    ///
    之前的最后一个逗号分隔的数字序列行,如 line
  • \K
    - 丢弃迄今为止与匹配内存缓冲区相匹配的所有文本
  • [\s\S]*?
    - 尽可能少的零个或多个字符
  • (?=\R.*\R/{3,}$)
    - 正向前瞻,要求以下模式立即匹配到当前位置的右侧:
    • \R.*
      - 换行和整行
    • \R
      - 换行符
    • /{3,}$
      - 三个或更多
      /
      字符直到行尾。

查看 NPP 演示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.