regex - 正则表达式 - 捕获多行模式 - 最短匹配
问题描述
我正在尝试捕获多行文本中的最短匹配项,并在找到整个模式之前停止检查开始模式是否再次出现。
有问题的模式:
test2(.|\n)*?test4
输入:
1 test1
2 test2
5 test5
6 test1
7 test2
8 test3
9 test4
10 test5
11 test1
12 test2
13 test3
14 test4
15 test5
预期 2 结果:
第一:第 7 行到第 9 行
第二:第 12 行到第 14 行
实际(不需要的)结果:
第一:第 2 行到第 9 行
第二:第 12 行到第 14 行
解决方案
(.|\n)*?
是非贪婪的,但它也可以匹配任何字符,包括任何形式的测试字符串。
您可能会做的是test
通过仅允许数字 2、3 或 4 来限制接受的字符串,并使非捕获组不贪婪以获得“最短”匹配。
test2(?:\n.*test[234])*?\n.*test4
模式匹配:
test2
从字面上匹配(?:
非捕获组作为一个整体重复\n.*test[234]
匹配换行符并在行中test
后跟数字 2、3 或 4
)*?
关闭非捕获组并可选地重复非贪婪\n.*test4
匹配换行符和匹配 test4 的行
查看正则表达式演示。
推荐阅读
- java - java.lang.NoSuchMethodError: 'com.google.api.client.json.JsonParser
- python - tensorflow v1 可以用于部署吗?
- mysql - 根据数字排序 ASC 或 DESC,但对于非数字行
- python - PyQt,Pyside2 为什么插槽通过 lambda 连接工作,而直接连接时不工作?
- asp.net-core - 当其中一项活动在公共交通中的指定时间没有消耗命令时补偿交易
- laravel-5 - Laravel 和 JS:使用 2 个变量发出 GET 请求
- python - MyPy 中的相同类型如何不兼容?
- jquery - jquery each for form 元素 - 如何获取表单中的下一个、上一个元素?
- r - Str_split 只返回字符串的一半
- ios - 如何使标签的背景图像适合标签的框架大小