powershell -like操作太相似

6l7fqoea  于 2023-04-30  发布在  Shell
关注(0)|答案(2)|浏览(111)

有没有一种方法可以说,在*之间只有一个数值,可能有两个值。我想选择项目,但我可以区分它们的方式非常有限。
我想存储像“31”这样的值。04.2003”,代码如下:$contentDateReal = $content_ -ilike '*"*.*.*",'
这对我来说是有效的,在大多数情况下,但有时我会得到这样的值:安装Acrobat Reader 10。0.1英寸
那些也适合像过滤器,但我不想要它们。有没有一种方法可以说,我只想要包含数字的值,并且在第一个点之前,只有2个(“xx”)索引大小,在第一个点之后也是(“xx”),并且在第二个点之后,有空间用于四个索引值,如“xxxx”或“2020”。

5ktev3wc

5ktev3wc1#

虽然您可以使用字符范围(如[0-9])来匹配该范围中的字符(数字),但PowerShell的wildcard expressions不支持匹配这些字符的 * 变化数量 *。
也就是说,'10' -like '[0-9][0-9]'$true,但'2' -like '[0-9][0-9]'不是。
注意:-ilike只是-like的别名,默认情况下它是不区分大小写的,所有PowerShell操作符都是这样的;相反,使用-clike进行区分大小写的匹配。此命名约定适用于(也)处理文本的所有运算符。
虽然您确实希望匹配 * 固定 * 位数,但如果在开始或结束时存在 * 额外 * 位数,则与固定数量的[0-9]范围匹配仍然可能产生误报,因此要排除这些情况,您需要使用regular expressions(regex)提供的更复杂的匹配:
PowerShell通过-match操作符(以及其他操作符)支持正则表达式,因此您可以使用以下内容:

('Some Software 31.04.2003', 'Installation Acrobat Reader 10.0.1').ForEach({
   if ($_ -match '\b(\d{2}\.\d{2}\.\d{4})\b') {
     "'$_' matched; extracted version number: $($Matches[1])"
   }
})

上面的结果如下,因为只有第一个字符串匹配:

'Some Software 31.04.2003' matched; extracted version number: 31.04.2003

正则表达式的解释:

  • \b在单词边界匹配,这意味着单词字符以外的字符(字母、数字或_)必须出现在该位置(可以包括字符串的开始和结束)。
  • \d匹配一个数字(大致相当于[0-9],后者限制匹配Unicode的ASCII子范围中的十进制数字);例如,{2}规定必须恰好存在 2 个数字示例。
  • \.表示逐字.(它必须是\-转义的,因为.是表示 any 字符的正则表达式元字符)。
  • (...)中封装一个子表达式会创建一个所谓的 capture group,它会额外捕获子表达式匹配的内容,并在自动$Matches变量中从索引1(用于潜在的多个(未命名的)捕获组的 first)开始提供。

请注意,-match-与-like不同-默认匹配 * 子字符串 *,因此不需要匹配版本号之前或之后的内容。

pobjuy32

pobjuy322#

抱歉迟到了,但这是搜索引擎的第一个结果之一,给出的答案至少是不完整的。
这种情况应该用正则表达式匹配来解决。这样,您就可以在一个正则表达式中实现手动执行的所有搜索逻辑。这样,您还可以考虑日期在行中的位置(开始,结束,在一些其他文本之间)。..)
要匹配像31.04.2003这样的日期,可以使用以下正则表达式:'\d{1,2}\.\d{1,2}\.\d{4}'
regex的意思是:

  • 一到两个{1,2}数字\d字符,后跟。..
  • 一个点\.(转义,因为正则表达式中的.表示 '除空格之外的任何一个',后跟。..
  • 一个或两个数字字符,后跟。..
  • 一个点后面跟着。..
  • 四个{4}数字字符。

示例:

PS C:\Users\any> "10.2.2001" -cmatch '\d{1,2}\.\d{1,2}\.\d{4}'
True
PS C:\Users\any> "10.0.1" -cmatch '\d{1,2}\.\d{1,2}\.\d{4}'
False

还请注意:

  • -like用于通配符比较
  • -match用于正则表达式匹配
  • -clike用于区分大小写的通配符比较
  • -cmatch用于区分大小写的正则表达式匹配。

相关问题