如何编写单行Regex检测字符串首匹配内容是否存在于剩余部分?
利用正则检测传输进度完成状态
当然可以!针对你这个检测传输进度是否完成的场景,我们可以写一个基于反向引用的正则表达式,精准判断最后一行是否满足「当前传输条数等于总记录条数」的要求。
正则表达式写法
^正在传输(\d+)条记录中的第\1条。$
各部分解释
^:匹配行的起始位置(开启多行模式时,确保是整行的开头,避免匹配到行中间的类似文本)正在传输:匹配固定的前置文本(\d+):捕获一个或多个数字(总记录条数),这个捕获组的编号为1条记录中的第:匹配固定的中间文本\1:反向引用第一个捕获组的内容,强制要求当前传输的条数和之前捕获的总条数完全一致条。:匹配固定的结尾文本$:匹配行的结束位置(多行模式下确保是整行的结尾)
使用场景与示例
1. 单独检测最后一行
如果你已经提取出最后一行字符串(比如正在传输301条记录中的第301条。),直接用这个正则匹配即可:
- 匹配成功:说明当前传输条数等于总条数,进度完成
- 匹配失败:说明还在传输中(比如
正在传输301条记录中的第299条。)
2. 处理多行文本
如果是直接处理包含所有传输日志的多行文本,需要开启正则的多行模式(不同语言开启方式不同:Python用re.M,JavaScript用/.../m),或者结合\Z(匹配整个字符串的结尾)来确保匹配的是最后一行:
正在传输(\d+)条记录中的第\1条。\Z
测试样例
对于你给出的日志内容:
正在传输301条记录中的第299条。
正在传输301条记录中的第300条。
正在传输301条记录中的第301条。
用上述正则匹配时,只有最后一行会被成功匹配,前两行会因为当前条数≠总条数而匹配失败,完美符合你的检测需求。
内容的提问来源于stack exchange,提问作者KingKongFrog
相关产品推荐
相关产品推荐

