PowerShell和-contains运算符

时间:2013-09-18 16:31:11

标签: powershell operators

请考虑以下代码段:

"12-18" -Contains "-"

您认为此评估结果为true,但事实并非如此。这将评估为false。我不确定为什么会这样,但事实确实如此。

为避免这种情况,您可以改用:

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

现在表达式将评估为true。

为什么第一个代码段表现如此? -有什么特别的东西与-Contains不能很好地搭配吗? documentation没有提及任何相关内容。

4 个答案:

答案 0 :(得分:137)

-Contains运算符不进行子字符串比较,匹配必须在完整的字符串上,并用于搜索集合。

从您链接到的文档:

  

- 包含   描述:遏制操作员。 判断参考值集合是否包含单个测试值。

在您提供的示例中,您正在使用仅包含一个字符串项的集合。

如果您阅读了链接到的文档,您将看到一个演示此行为的示例:

示例:

PS C:\> "abc", "def" -Contains "def"
True

PS C:\> "Windows", "PowerShell" -Contains "Shell"
False  #Not an exact match

我认为你想要的是-Match运营商:

"12-18" -Match "-"

返回True

答案 1 :(得分:31)

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

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

-like-ilike是类似SQL的匹配器。

答案 2 :(得分:6)

您可以使用like

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

split contains

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

答案 3 :(得分:0)

  • df = spark.createDataFrame([([0.21, 2018]), ([0.18, 2018]), ([0.21, 2012]), ([-1.01, 2012])], ["return", "year"]) df.printSchema() root |-- return: double (nullable = true) |-- year: long (nullable = true) from pyspark.sql.functions import * df.groupBy("year").agg(avg("return").alias("avg_return")).show() +----+----------+ |year|avg_return| +----+----------+ |2012| -0.4| |2018| 0.195| +----+----------+ 是最好的,或者至少是最简单的。
  • like用于进行正则表达式比较。

参考:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6