-3
votes

PowerShell Regex Expression pour faire partie d'une chaîne

Je voudrais participer à une chaîne pour l'utiliser ailleurs. Par exemple, j'ai les chaînes suivantes:

  • Project XYZ est le nom du projet - 20-12-11

    Je voudrais obtenir la valeur "XYZ est le nom du projet" de la chaîne. Le mot "projet" et caractère "-" avant que le nombre ne soit toujours présent.


2 commentaires

Et quel est votre problème avec ça? Qu'est-ce qui ne fonctionne pas? En savoir plus sur Régulier Expressions .


J'ai besoin de l'expression que je peux utiliser pour obtenir ce résultat


3 Réponses :


0
votes
# define the input string
$str = 'Project XYZ is the project name - 20-12-11'

# use regex (-match) including the .*? regex pattern 
# this patterns means (.)any char, (*) any times, (?) maximum greed
# to capture (into brackets) the desired pattern substring
$str -match "(Project.*?is the project name)"

# show result (the first capturing group)
$matches[1]

1 commentaires

S'il vous plaît ne postez pas uniquement de code comme réponse, mais fournissez également une explication de votre code et de la manière dont il résout le problème de la question. Les réponses avec une explication sont généralement plus utiles et de meilleure qualité, et sont plus susceptibles d'attirer des upvotes.



6
votes

Je pense qu'un Lookarning Expression régulière fonctionnerait ici depuis "projet" et " - "sont toujours là:

(? P>

Un regard suround peut être utile pour obtenir un subordonneur String. P>

Explication: P>

  • (? = LookeDeHind Li>
  • projet code> = chaîne de démarrage (espace inclus) li>
  • ) code> = la fermeture de la vedette négative li>
  • . +? code> = correspond à quelque chose entre li>
  • (? = code> = lookahead positif li>
  • - code> = fin de fin de la chaîne li>
  • ) code> = fermeture positive lookahead li> ul>

    Exemple dans PowerShell: P>

    Function GetProjectName($InputString) {
        $regExResult = $InputString | Select-String -Pattern '(?<=Project ).+?(?= -)'
        $regExResult.Matches[0].Value
    }
    
    $projectName = GetProjectName -InputString "Project XYZ is the project name - 20-12-11"
    Write-Host "Result = '$($projectName)'"
    


2 commentaires

Merci Brat. Je suis en fait nouveau dans Regex et j'apprécierais vraiment que vous puissiez vous aider à mieux comprendre comment utiliser Regex avec PowerShell.


D'accord Amir, je viens d'ajouter un exemple dans PowerShell. Espérons que c'est utile dans votre situation.



2
votes

Voici encore une autre version de regex. [ grin ] Il peut être plus facile de comprendre car il utilise des motifs de regex quelque peu de base.

Qu'est-ce que c'est ...

  • définit la chaîne d'entrée
  • Définit le préfixe pour correspondre de
    Cela ne gardera que ce qui vient après it.
  • Définit le suffixe pour correspondre de
    Cette partie ne gardera que ce qui est avant it.
  • déclencher le remplacement de
    La pièce dans le () est ce qui sera placé dans le premier groupe de capture.
  • montrer ce qui a été gardé

    le code ... xxx


2 commentaires

Cette réponse est meilleure parce que c'est en fait un code PowerShell


Jusqu'à ce que votre commentaire, je n'ai pas remarqué que la réponse par BART n'était que REGEX, pas POSH avec regex. [ blush ]