regex 用于查找其他数字之间的重复数字的正则表达式

tf7tbtn2  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(127)

我有下面的数组,需要两个正则表达式过滤器,我想在PowerShell中使用。

000111
010101
220220
123456

筛选器1:出现次数等于或多于三次的数字0。筛选后我希望得到以下值

000111
010101

过滤器2:所有出现三次或三次以上的数字。我应该只看到这些数字。

000111
010101
220220

使用**0{3,}**我只能识别序列中的数字,因此我只能得到数字

000111

是否可以找到其他号码之间的重复号码?

3wabscal

3wabscal1#

既然你坚持 * 在regex中查看解决方案 *,那么看看这个:'(\d).*\1.*\1'
我想这是可以理解的,不需要进一步解释,不是吗?

cbwuti44

cbwuti442#

  • Armali's helpful answer简短扼要(使用'(0).*\1.*\1'作为过滤器1),而且绝对是当前问题的最佳解决方案,因为您只需要抽象地知道 * 是否 * 给定字符串有 * 3个或更多 * 零/相同的数字。
  • 如果您需要知道0 s/digits的 * 特定计数 *,下面的解决方案可能会很有意思,据我所知,这不能由正则表达式(单独)处理

过滤器1的出现计数变体:

@(
  '000111'
  '010101'
  '220220'
  '123456'
).ForEach({ 
  $zerosOnly = $_ -replace '[^0]'
  [pscustomobject] @{
    InputString = $_
    CountOfZeros = $zerosOnly.Length
  }
})

也就是说,输入数组中的每个字符串(通过固有的ForEach()方法枚举)都有通过基于regex-replace运算符删除的所有字符,因此结果字符串的长度等于零的计数。
输出:

InputString CountOfZeros
----------- ------------
000111                 3
010101                 3
220220                 2
123456                 0

过滤器2的出现计数变体

@(
  '000111'
  '010101'
  '220220'
  '123456'
).ForEach({ 
  $outputObject = [pscustomobject] @{ InputString = $_; DigitCounts = [ordered] @{} }
  ([char[]] $_ | Group-Object).ForEach({ 
    $outputObject.DigitCounts[$_.Name] = $_.Count
  })
  $outputObject 
})

也就是说,每个输入字符串by都使用Group-Object按其字符分组,Group-Object的输出对象反映.Name属性中的现有字符和组成员数(即.Count属性中该字符的出现次数)。有序的hashtable用于报告字符-出现次数-计数对。
输出:

InputString DigitCounts
----------- -----------
000111      {[0, 3], [1, 3]}
010101      {[0, 3], [1, 3]}
220220      {[0, 2], [2, 4]}
123456      {[1, 1], [2, 1], [3, 1], [4, 1]…}

例如,上述输出中的{[0, 2], [2, 4]}表示字符'0'在输入字符串'220220'中出现2次,'2'4次。

相关问题