我有一个列表,这是一个示例片段:
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[\s\S]*?(?=\R.*\R/{3,}$)
请参阅 正则表达式演示。
详情:
^\d+(?:,\d+)*\R(?=(?:(?!\d+(?:,\d+)*$).*\R)*/{3,}$)
- 匹配 ///
之前的最后一个逗号分隔的数字序列行,如 line\K
- 丢弃迄今为止与匹配内存缓冲区相匹配的所有文本[\s\S]*?
- 尽可能少的零个或多个字符(?=\R.*\R/{3,}$)
- 正向前瞻,要求以下模式立即匹配到当前位置的右侧:
\R.*
- 换行和整行\R
- 换行符/{3,}$
- 三个或更多 /
字符直到行尾。查看 NPP 演示: