【问题标题】:Regex against an odd value针对奇数值的正则表达式
【发布时间】:2016-03-21 22:24:53
【问题描述】:

我正在通过 csv 解析以导出到两个类别:通过 powershell 进行匹配和非匹配。

csv中的数据格式如下:

SamAccountName
xx9999xx
aa0000aa
ab0909xc
等

我需要一个正则表达式,它允许我过滤掉所有遵循 aa0000bb 命名约定的匹配项并将其导出到 csv 中(与不匹配 aa0000bb 约定的匹配项相同) 约定(因为它很奇怪):前 2 个是从 a-z 范围内的字母,然后是 4 个数字 0-9,然后是 2 个字母 a-z。这意味着您可以拥有 aa0000aa 和 by7690zi

现在我有:

Import-Csv "C:\Path\to\csv" | ForEach {
$Name =$_.SamAccountName;
$Name -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]'} | Out-Null; $Matches

ForEach ($Name in $CSV)
{
    If ($Name -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]')
        {
         Write-Host "$Matches"
        }else{
         Write-Host "No Match"
        }
}

两者似乎都输出不正确的随机内容。 我在想(真的希望)有一种方法可以通过以下方式进行匹配:

a-z #For the first set of letters
0-9 #For the 4 digits
a-z #For the second set of letters

ie [a-z{2}]+[0-9{4}]+[a-z{2}]

我可以运行一个普通的'xx9999xx' -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]',它返回true,然后

PS C:\Windows> $Matches

Name                           Value                                                                                                                                                                                                  
----                           -----                                                                                                                                                                                                  
0                              xx9999xx  

但我仍然不明白如何大规模地做到这一点。

【问题讨论】:

  • 你能提供样本输入和输出吗?每行输入是否有多个aa0000aa?
  • @Arluin - 不是唯一值,因此只有一个 aa0000aa 实例,下一个值将是 aa0000ab 等。

标签: regex csv powershell


【解决方案1】:

与您的约定相匹配的正确正则表达式应如下所示。

正则表达式: [a-z]{2}[0-9]{4}[a-z]{2}

Regex101 Demo

【讨论】:

  • 所以我的想法有点接近!谢谢菜鸟:)
【解决方案2】:

noob 有一个正确的正则表达式来匹配您的问题。要了解为什么您的匹配比您预期的要多,是因为加号是正则表达式中的量词元字符。这意味着

一次和无限次之间,尽可能多次,按需回馈

因此,如果您的数字多于两个,它会尝试匹配更多。所以这将是一个有效的匹配

aaaa00000000000aaaa

使用固定量词{2}{4} 等将完全匹配您想要的。

Regex101.com 是快速测试的绝佳资源。它还很好地解释了您的正则表达式。

【讨论】:

  • 啊,我明白了。 Regex101 是一个漂亮的工具。我猜 Php 和 powershell 在处理正则表达式的方式上是相似的?谢谢你,马特
猜你喜欢
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多