findstr命令下满足特定行首规则的带空格正则编写求助
findstr正则匹配解决方案
问题原因
你之前的命令存在两个核心问题:
- findstr的正则实现为精简版本,不支持
{m,n}这类区间量词,你写的[0-9]仅能匹配1位数字加空格的场景,覆盖不了要求的3-5位数字规则; - 原命令没有覆盖「行首星号后接2-10个连续空格」的匹配规则。
另外命令行直接传入带空格的多个正则时,cmd会把正则内部的空格识别为参数分隔符,把完整正则拆成碎块,导致命令运行异常、挂起。最稳定的实现方式是使用/G选项加载正则规则文件,避免参数转义问题。
方案1:/G规则文件方案(推荐,无兼容问题)
操作步骤
- 新建纯文本文件命名为
rules.txt,逐行写入以下内容,注意每行末尾的空格必须保留,不要加多余空行:
\*[PCT][0-9][0-9][0-9] \*[PCT][0-9][0-9][0-9][0-9] \*[PCT][0-9][0-9][0-9][0-9][0-9] \* \* \* \* \* \* \* \* \*
规则说明:前三行对应「星号+P/C/T+3/4/5位数字+空格」的要求,后九行对应「星号+2到10个连续空格」的要求,因为findstr不支持区间量词,只能手动展开不同长度的匹配模式。
- 在命令行执行以下命令:
findstr /R /B /G:rules.txt SampleInput.txt
参数说明
/R:开启正则匹配模式/B:强制所有规则从行首开始匹配,避免匹配到行中间出现的*字符/G:rules.txt:从rules.txt逐行读取匹配规则,每行对应一个独立正则
执行后会精准输出要求的9条匹配行,不会误匹配星号不在行首、数字后无空格、星号后仅1个空格的无效行。
方案2:纯命令行方案(不推荐,容易出现转义问题)
如果不想新建规则文件,可以把所有规则放在同一个双引号包裹的参数内传入,但该方案对空格位置、cmd版本敏感度高,容易出现匹配异常,仅做参考:
findstr /R /B "\*[PCT][0-9][0-9][0-9] \*[PCT][0-9][0-9][0-9][0-9] \*[PCT][0-9][0-9][0-9][0-9][0-9] \* \* \* \* \* \* \* \* \* " SampleInput.txt
内容的提问来源于stack exchange,提问作者Stumpy
相关产品推荐
相关产品推荐

