2010-09-16 7 views
0

je la chaîne suivante "sometextsometextSiteId-111-aaaaasometext"question simple match regex

Si la chaîne contient "SiteId-111-AAAAA" Je voudrais obtenir la partie 111 AAAAA. (n'importe quel nombre, n'importe quel caractère)

"sometextsometextSiteId-111-aaaaasometext" -> 111-aaaaa 
"sometextsometextSiteId-123-abcdesometext" -> 123-abcde 
"sometextsometextsitId-111-aaaaasometext" -> (nothing) 
"SiteId-999-QWERTPOIPOI" -> "999-QWERR" 

Je suppose que cela devrait être possible?

Des indices?

Merci Larsi

Répondre

2
(?<=SiteId-)([0-9]+-[a-zA-Z]{5}) 

devraient saisir cette partie.

test PowerShell:

$re = '(?<=SiteId-)([0-9]+-[a-zA-Z]{5})' 

'sometextsometextSiteId-111-aaaaasometext', 
"sometextsometextSiteId-123-abcdesometext", 
"sometextsometextsitId-111-aaaaasometext", 
"SiteId-999-QWERTPOIPOI" | 
% { 
    $x = [regex]::Matches($_, $re) 
    Write-Host $_ - $x 
} 

cède

sometextsometextSiteId-111-aaaaasometext - 111-aaaaa 
sometextsometextSiteId-123-abcdesometext - 123-abcde 
sometextsometextsitId-111-aaaaasometext - 
SiteId-999-QWERTPOIPOI - 999-QWERT 
+0

Note de côté: "n'importe quel nombre, n'importe quel caractère" est une exigence qui impliquerait n'importe quel caractère Unicode pour moi. De plus, vous n'étiez pas très explicite sur la longueur des champs. Adaptez en conséquence. – Joey

+0

Eh bien, oui un peu flou dans specyfing, mais ce n'est que mineur. Merci beaucoup pour votre aide rapide et efficace. Sympa aussi de voir le test PowerShell. :-) – Larsi

+0

Larsi: Pour ce genre de choses, j'utilise souvent PowerShell pour les tester rapidement et faire une démonstration de son fonctionnement - ou même pas du tout. De plus, comme PowerShell est basé sur .NET, les résultats sont généralement cohérents avec ce que vous obtiendriez en C#. – Joey

0

SiteId - (\ d {3} - \ D +) cela devrait saisir cela.

Vous pouvez également utiliser rubular pour essayer vos expressions régulières et il a une référence regexp rapide en bas.

+0

Non, ce ne serait pas. Il prendrait "111-aaaaasometext" au lieu de "111-aaaaa" – Joey

+0

Vous avez raison, j'ai mal interprété la question. Le "n'importe quel nombre, n'importe quel char" m'a confondu là-bas :) – Skawouter

+0

Eh bien, la règle des cinq caractères était plutôt non écrite, en effet. Et oui, je ne suis pas sûr que '\ D' ou' \ w' serait correct. – Joey