我有一个列表,这里有一个示例片段:
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}))
您可以使用
参见正则表达式演示。
细节:
^\d+(?:,\d+)*\R(?=(?:(?!\d+(?:,\d+)*$).*\R)*/{3,}$)
///
- 匹配类似行 之前的最后一个逗号分隔的数字序列行\K
- 丢弃迄今为止从匹配内存缓冲区匹配的所有文本(?:(?!^/{3,}$)[\s\S])*?
- 零个或多个字符尽可能少,每个字符都不是仅由三个或更多斜线组成的行的起点(?=(?!/{3,}$).*\R/{3,}$)
- 正向前瞻要求以下模式立即匹配当前位置的右侧:(?!/{3,}$)
- 如果到行尾有三个或更多斜线,则检查失败.*
- 一整行\R
- 换行符/{3,}$
-/
到行尾还有三个或更多字符。查看NPP演示: