考虑下面的代码片段:

"12-18" -Contains "-"

你可能会认为这是正确的,但事实并非如此。这将计算为false。我不知道为什么会这样,但确实如此。

为了避免这种情况,你可以使用这个:

"12-18".Contains("-")

现在表达式的值将为true。

为什么第一个代码片段是这样的?是不是有什么特别的-不适合-含有?文档中没有提到任何关于它的内容。


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操作符使用正则表达式来执行文本匹配。


-Contains实际上是一个集合运算符。如果集合包含该对象,则为真。它不局限于字符串。

-match和- immatch是正则表达式字符串匹配器,并设置自动变量用于捕获。

-like, -ilike是类sql的匹配器。


你可以用like:

"12-18" -like "*-*"

或split for包含:

"12-18" -split "" -contains "-"

喜欢是最好的,或者至少是最简单的。 Match用于正则表达式比较。

参考:关于比较操作符