正则表达式需求:匹配日期后行并排除特定后续内容
修正后的正则表达式解决方案
需求回顾
匹配dd.MM.yyyy HH:mm格式日期行之后的第一行内容,仅当该行的下一行不是以下两种格式时匹配:
- 单独的
- 数字-数字格式(如940-750)
修正后的正则表达式
(?<=\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}\r?\n)([\w\säöüÄÖÜßé'-]+)(?!\r?\n(?:\d+-\d+|-)$)
注意:需要开启多行模式(m标志),让$匹配每行的结尾而非整个文本的结尾。
正则各部分解释
- 后顾断言(匹配日期行):
(?<=\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}\r?\n)- 精确匹配
dd.MM.yyyy HH:mm格式的日期行,\r?\n兼容Windows和Unix换行符,确保目标行是日期行的下一行。
- 精确匹配
- 目标内容匹配:
([\w\säöüÄÖÜßé'-]+)- 匹配包含字母、数字、空格、特殊字符(äöüÄÖÜßé'-)的整行内容,覆盖示例中的国家名称格式。
- 否定预查(排除不符合条件的情况):
(?!\r?\n(?:\d+-\d+|-)$)- 检查目标行的下一行:如果是
数字-数字或单独的-整行,则不匹配当前目标行;否则允许匹配。
- 检查目标行的下一行:如果是
示例验证
针对提供的测试文本,该正则会精准匹配:
GERMANY(下一行是OWVA2,不符合排除格式)FRANCE(下一行是ANDY,不符合排除格式)SPAIN(无后续行,符合匹配条件)
同时会排除:
JAPAN(下一行是940-750,属于数字-数字格式)NORWAY and SWEDEN(下一行是-,属于单独横线格式)
内容的提问来源于stack exchange,提问作者SevenTwo
相关产品推荐
相关产品推荐

