J'ai une liste de chaînes et certaines d'entre elles commencent par "*" par exemple: "* ThisIsAString", "* Ceci est aussi une chaîne".
Je voudrais utiliser une clause where pour sélectionner uniquement les chaînes commençant par "*" mais, comme * est le caractère utilisé pour spécifier, continuer jusqu'à la fin de la chaîne - j'ai du mal. p >
Voici ce que j'essaie de faire, en quelque sorte: Where-Object {$ _. DisplayName -like "*"}
Je suis sûr que c'est possible, mais je n'ai pas trouvé de moyen de le faire après quelques recherches en ligne!
3 Réponses :
$_.DisplayName.StartsWith('* ')
@AnsgarWiechers Ai-je raison de dire que cela fonctionne, car à l'intérieur d'un Range les caractères génériques sont pris littéralement?
@LotPings: Oui, mais notez que - même si la documentation l'appelle ainsi - [...] n'est pas simplement une plage , sans - code>, vous pouvez placer des caractères les uns à côté des autres pour les interpréter comme un ensemble afin que tout caractère individuel corresponde; par exemple. 'whoa' - comme 'wh [ao] [oa]'
@ mklement0 Oui, je suis conscient que la plage / l'ensemble est comparable à Classes de caractères RegEx ou jeux de caractères juste sans négations ni quantificateurs. Je voulais expliquer pourquoi cela fonctionne.
@LotPings: Heureux de l'entendre, mais suggérez que si vous voulez souligner quelque chose que vous savez déjà être vrai , ne l'exprimez pas comme une question .
Une autre façon de faire est une regex -match :
PS> $strings='* one','two','* three'
PS> $strings.Where({$_ -match '^\* '})
* one
* three
Merci (+1) - J'ai supprimé mon commentaire précédent (et je vais supprimer celui-ci).
Votre propre réponse basée sur les commentaires utiles d'Ansgar Wiecher et L'alternative utile de Gert Jan Kraaijeveld fournit toutes deux des solutions efficaces.
La solution la plus immédiate consiste à échapper le caractère * . dans votre expression générique, ce qui peut être fait avec un backtick ( `), mais notez qu'il doit être placé dans une chaîne guillemets simples ( '...' ):
PS> '* foo' -like '`* *' True
$ _. DisplayName -comme '[*] *'ou$ _. DisplayName.StartsWith ('*').@GertJanKraaijeveld: Oui, mais notez que ce n'est pas un échappement qui est utilisé, c'est un jeu de plage / de caractères ; le vrai échappement fonctionne aussi:
'* foo' -like '`* *'