6
votes

Regex pour faire correspondre une chaîne après le côlon

Strent d'entrée est quelque chose comme ceci: Ou = Test: this001. Nous avons besoin de "this001" supplémentaire. Meilleur en c #.


0 commentaires

4 Réponses :


34
votes

Qu'en est-il de: xxx

Voici comment cela fonctionne: xxx

pour le / ils " Re délimiteurs de savoir où le début de la regex commence et où il se termine (et pour ajouter des options).

Le groupe capturé contiendra this001 .

Mais ce serait plus rapide avec un simple sous-chaîne () . xxx


ressources:


10 commentaires

Je n'ai jamais utilisé cette syntaxe, intéressante, quelque chose à regarder aujourd'hui :)


Je ne trouve aucune documentation sur votre construction de regex, pouvez-vous s'il vous plaît fournir une référence?


@Leppie, mis à jour avec plus d'informations, mais votre devrait aller sur régulier-expressions.info Il y a un beaucoup d'informations sur les regexes là-bas.


Le (code> / ne semble pas être valide pour .NET. IIRC, c'est une chose javascript, pas?


@leppie, sa syntaxe de Perl, mais elle est également utilisée avec d'autres saveurs de regex. Vous avez raison, pas besoin de délimiteurs, mais je les utilise toujours pour avoir une regex "standard", que tout le monde peut comprendre.


Merci, je pensais que j'étais un peu confus :)


Un problème avec ceci est-ce sur le point de conduire. E.g dans le cas de CN = Test: this001. Nous extraions d'un certificat numérique. Seule la chaîne après "ou =" doit être appariée.


Il suffit d'ajouter ou =. *? au début de votre regex.


+1 pour marcher à ceux d'entre nous par l'OMS qui doivent être retenties à chaque fois que nous utilisons une regex.


+1 Pour expliquer ce que signifie n'importe quel caractère là-bas, les gens coutumes pour donner la recette mais oublient d'expliquer. Merci!



5
votes

"OU =" sent que vous faites une recherche Active Directory ou LDAP et répondez aux résultats. Alors que Regex est un outil brillant, je voulais juste m'assurer que vous êtes également conscient des excellentes classes System.Directoryservices.protocols effectuées pour analyse, filtrage et manipulation de ce type de données.

La rechercheResult, la rechercheResultytry et DirectoryAttribute en particulier seraient les amis que vous recherchez. Je ne doute pas que vous pouvez dégoût ou sous-chaîner aussi intelligemment que le prochain gars, mais il est également agréable d'avoir un autre bon outil dans la boîte à outils.

Avez-vous essayé ces classes?


1 commentaires

Ceci est d'un certificat. "OU =" fait partie du nom du sujet de System.Security.Cryptography.x509Certificats.



0
votes

si le ou = test: est votre exigence avant la chaîne que vous souhaitez faire correspondre, utilisez cette regex: xxx

que RegEx correspond à toute longueur de texte après Le côlon, alors que tout texte avant que le côlon n'est juste une exigence.

Vous pouvez remplacer test avec [A-za-z] + pour correspondre Tout texte autre que test ou vous pouvez remplacer test avec [\ w] + pour correspondre à n'importe quelle longueur de toute combinaison d'alphabet et de numéros.

\ s * signifie qu'il pourrait s'agir d'un nombre quelconque d'espaces blanchisseurs ou de rien dans cette position, supprimez-le si vous n'avez pas besoin d'un tel chèque.


0 commentaires

3
votes

une solution sans regex: xxx pré>

regex vs scindinal vs index de stry> p>

divisée p>

var str = "OU=TEST:This00:1";

var sw = new Stopwatch();

sw.Start();
var result = str.Substring(str.IndexOf(":") + 1);
sw.Stop();

// sw.ElapsedTicks == 40


3 commentaires

Bonne idée, mais seulement "ou =" et ":" ont une valeur fixe / longueur. Tout le reste est variable.


@ICERMAN: la longueur n'a pas d'importance, s'il a au moins un : il obtiendra tout après elle.


str.split (nouveau caractère [] {':'}, 2) Le deuxième paramètre indique le nombre de pièces qu'il sera divisée. Dire de se diviser en 2 va causer ou = jjj: kkkkkk: aaaaa: ssssss: xxxx retournera 2 groupes: ou = jjj kkkkkk: AAAAA: SSSSSS: xxxx