考虑以下代码段:"12-18" -Contains "-"您可能以为这是true,但不是。这将评估来false代替。我不确定为什么会这样,但是确实如此。为了避免这种情况,您可以改用以下方法:"12-18".Contains("-")现在,表达式将评估为true。为什么第一个代码段的行为如此?有什么特别之处-不能很好地解决-Contains吗?该文档没有提及任何内容。
3 回答
波斯汪
TA贡献1811条经验 获得超4个赞
该-Contains运营商没有做串比较和匹配必须是一个完整的字符串,用于搜索集合。
从您链接到的文档中:
-包含说明:遏制运算符。告诉参考值集合是否包含单个测试值。
在您提供的示例中,您正在使用仅包含一个字符串项的集合。
如果您阅读了链接到的文档,您将看到一个演示此行为的示例:
例子:
PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False #Not an exact match
我认为您想要的是-Match操作员:
"12-18" -Match "-"
哪个返回True。
重要说明:如注释和链接文档中所指出,应注意,-Match运算符使用正则表达式执行文本匹配。
MMMHUHU
TA贡献1834条经验 获得超8个赞
-Contains实际上是一个集合运算符。如果集合包含对象,则为true。它不仅限于字符串。
-match和-imatch是正则表达式字符串匹配器,并设置自动变量以与捕获一起使用。
-like,-ilike是类似SQL的匹配器。
茅侃侃
TA贡献1842条经验 获得超21个赞
您可以使用like:
"12-18" -like "*-*"
或split为contains:
"12-18" -split "" -contains "-"
- 3 回答
- 0 关注
- 837 浏览
添加回答
举报
0/150
提交
取消