如何编写正则匹配不包含@Tag前缀的Scenario代码块?
正则解决方案
原写法问题
你之前编写的(?!@Tag-\d{4})\nScenario使用了负向前瞻语法,仅能校验当前位置之后的内容不符合@Tag-\d{4}规则,完全无法覆盖「校验Scenario前一行是否存在@Tag标签」的需求,因此匹配结果不符合预期。
正确正则
使用时需要开启多行模式(MULTILINE)和单行模式(DOTALL,即s flag,允许.匹配换行符),正则如下:
(?<!@Tag-\d{4}\n)^Scenario:.*?(?=\n{2}|\Z)
语法解释
(?<!@Tag-\d{4}\n):负向后视断言,确认当前Scenario行的前一行不是@Tag-加4位数字的标签行^Scenario::匹配行首起始的Scenario:标记,多行模式下^会识别每一行的行首位置.*?(?=\n{2}|\Z):非贪婪匹配所有内容,直到遇到两个连续换行(块之间的分隔空行)或者文本结束位置,刚好完整覆盖整个Scenario块的内容
匹配结果
在你提供的测试文本中,该正则会精准匹配到目标第二个无前置@Tag标签的Scenario块:
Scenario: Blabla
内容的提问来源于stack exchange,提问作者Guillermo Gonzalez
相关产品推荐
相关产品推荐

