有没有一种方法可以说,在*
之间只有一个数值,可能有两个值。我想选择项目,但我可以区分它们的方式非常有限。
我想存储像“31”这样的值。04.2003”,代码如下:$contentDateReal = $content_ -ilike '*"*.*.*",'
这对我来说是有效的,在大多数情况下,但有时我会得到这样的值:安装Acrobat Reader 10。0.1英寸
那些也适合像过滤器,但我不想要它们。有没有一种方法可以说,我只想要包含数字的值,并且在第一个点之前,只有2个(“xx”)索引大小,在第一个点之后也是(“xx”),并且在第二个点之后,有空间用于四个索引值,如“xxxx”或“2020”。
2条答案
按热度按时间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
操作符(以及其他操作符)支持正则表达式,因此您可以使用以下内容:上面的结果如下,因为只有第一个字符串匹配:
正则表达式的解释:
\b
在单词边界匹配,这意味着单词字符以外的字符(字母、数字或_
)必须出现在该位置(可以包括字符串的开始和结束)。\d
匹配一个数字(大致相当于[0-9]
,后者限制匹配Unicode的ASCII子范围中的十进制数字);例如,{2}
规定必须恰好存在 2 个数字示例。\.
表示逐字.
(它必须是\
-转义的,因为.
是表示 any 字符的正则表达式元字符)。(...)
中封装一个子表达式会创建一个所谓的 capture group,它会额外捕获子表达式匹配的内容,并在自动$Matches
变量中从索引1
(用于潜在的多个(未命名的)捕获组的 first)开始提供。请注意,
-match
-与-like
不同-默认匹配 * 子字符串 *,因此不需要匹配版本号之前或之后的内容。pobjuy322#
抱歉迟到了,但这是搜索引擎的第一个结果之一,给出的答案至少是不完整的。
这种情况应该用正则表达式匹配来解决。这样,您就可以在一个正则表达式中实现手动执行的所有搜索逻辑。这样,您还可以考虑日期在行中的位置(开始,结束,在一些其他文本之间)。..)
要匹配像
31.04.2003
这样的日期,可以使用以下正则表达式:'\d{1,2}\.\d{1,2}\.\d{4}'
regex的意思是:
{1,2}
数字\d
字符,后跟。..\.
(转义,因为正则表达式中的.
表示 '除空格之外的任何一个',后跟。..示例:
还请注意:
-like
用于通配符比较-match
用于正则表达式匹配-clike
用于区分大小写的通配符比较-cmatch
用于区分大小写的正则表达式匹配。