PowerShell正则匹配非连续重复数字的两类过滤需求问询
PowerShell正则过滤规则解决方案
给定目标数组:
000111 010101 220220 123456
过滤规则1:匹配包含3个及以上数字0的内容
0{3,}仅能匹配连续的3个0,要识别被其他数字间隔的非连续0,可使用以下正则:
^(?:[^0]*0){3,}[^0]*$
正则说明
(?:[^0]*0):非捕获组,匹配任意数量(含0)的非0字符,后跟一个0{3,}:重复该组3次及以上,确保字符串中至少存在3个0[^0]*:匹配末尾剩余的非0字符(可选)
PowerShell执行代码
$targetArr = @("000111", "010101", "220220", "123456") $filteredResult = $targetArr | Where-Object { $_ -match '^(?:[^0]*0){3,}[^0]*$' } $filteredResult
输出结果:
000111 010101
过滤规则2:匹配包含任意数字出现3次及以上的内容
通过反向引用实现任意数字的非连续重复匹配,正则表达式如下:
^.*(\d)(?:.*\1){2,}.*$
正则说明
(\d):捕获任意单个数字(?:.*\1){2,}:非捕获组,匹配任意数量字符后跟上捕获到的数字,重复2次及以上(加上首次捕获,总出现次数≥3)- 整个表达式确保字符串中至少有一个数字的出现次数达到3次或更多
PowerShell执行代码
$targetArr = @("000111", "010101", "220220", "123456") $filteredResult = $targetArr | Where-Object { $_ -match '^.*(\d)(?:.*\1){2,}.*$' } $filteredResult
输出结果:
000111 010101 220220
内容的提问来源于stack exchange,提问作者uragus
相关产品推荐
相关产品推荐

