如何用正则匹配分隔符间含连续字母开头行的区块(跳过日期行)
正则匹配包含连续字母开头行的完整区块需求与解决方案
原始文本内容
ABC 44234234 GHG FGyhyh Nov2016 ///////////////////////// ABCtt 44234234 GHG 00 FGyhyh Nov2015 ///////////////////////// ABC 44234234 GHG hyh Jan2022 /////////////////////////
核心需求
- 匹配被
/////////////////////////分隔符包裹的完整区块,要求区块内包含至少两行连续的以字母开头的行 - 需排除仅含数字连续行的区块(如上述第二个区块)
- 正则必须跳过日期行(格式为
三个英文字母+四位数字,例如Nov2016、Jan2022)
已尝试但无效的正则表达式
^/+\R\K(?:(?!/+$|^[A-Za-z].*\R[A-Za-z].*$).*\R)*^[A-Za-z].*(?:\R[A-Za-z].*)*(?:\R(?!/+$).*)*(?=\R/+$) ^/+\R\K(?:(?!/+$|\d[\d,]*\R\d[\d,]*$).*\R)*^[A-Za-z].*(?:\R[A-Za-z].*)*(?:\R(?!/+$).*)*(?=\R/+$)
参考成功正则(匹配含数字连续行的区块)
^/+\R\K(?:(?!/+$|\d[\d,]*\R\d[\d,]*$).*\R)*\d[\d,]*(?:\R\d[\d,]*)+(?:\R(?!/+$).*)*(?=\R/+$)
适配字母连续行的正确正则
^/+\R\K(?:(?!/+$|^[A-Za-z].*\R[A-Za-z].*$|^[A-Za-z]{3}\d{4}$).*\R)*^[A-Za-z].*(?:\R[A-Za-z].*)+(?:\R(?!/+$|^[A-Za-z]{3}\d{4}$).*)*(?=\R/+$)
正则逻辑说明
^/+\R\K:匹配开头的分隔符序列并跳过,定位到区块内容起始位置(?:(?!/+$|^[A-Za-z].*\R[A-Za-z].*$|^[A-Za-z]{3}\d{4}$).*\R)*:匹配连续字母行之前的所有行,同时跳过分隔符、连续字母行组合、日期行^[A-Za-z].*(?:\R[A-Za-z].*)+:精准匹配至少两行连续的字母开头行,这是区块的判定核心(?:\R(?!/+$|^[A-Za-z]{3}\d{4}$).*)*:匹配连续字母行之后的剩余内容,跳过分隔符和日期行(?=\R/+$):正向预查结尾的分隔符,确保捕获的是完整的目标区块
内容的提问来源于stack exchange,提问作者Pubg Mobile
相关产品推荐
相关产品推荐

