8
votes

Y a-t-il un moyen de créer une chaîne correspondant à une regex C # donnée?

Mon application a une fonctionnalité qui analyse du texte à l'aide d'une expression régulière pour extraire des valeurs spéciales. Je me trouve aussi besoin de créer des chaînes qui suivent le même format. Existe-t-il un moyen d'utiliser l'expression régulière déjà définie pour créer ces chaînes?

Par exemple, supposons que ma regex ressemble à ceci: p>

var created = MyRegex.ToString( new Dictionary<string, string>() {{ "group1", "data1" }};


1 commentaires

3 Réponses :


0
votes

Vous voudrez peut-être vérifier si PEX peut le comprendre. Créez une méthode qui prend une chaîne et retourne si cette regex correspond. PEX pourrait simplement être suffisamment intelligent pour trouver des entrées pour votre méthode qui testeront divers aspects de l'expression. (Cela pourrait même vous aider à attraper des cas d'angle que vous n'aviez pas envisagé.

Autre que cela, non. Vous demandez à un système (regex) de faire quelque chose qu'il n'a été totalement pas construit à faire.


0 commentaires

1
votes

Regex natif ne peut pas faire quelque chose comme ça.

Si vous VRAIMENT VOULEZ GENERATEZ DES CRÉDITIONS correspondant à un ensemble de critères, vous pouvez rechercher grammes définies (DCG) au lieu d'une expression régulière. Un Langue de programmation logique tel que prolog doit pouvoir générer des chaînes correspondant aux règles grammaticales que vous avez définies.

de wikipedia:

Un exemple de base de DCGS aide à illustrer ce qu'ils sont et à quoi ils ressemblent.

phrase -> Noun_Phrase, verb_phrase.

Noun_Phrase -> Det, nom.

Verb_Phrase -> Verbe, Noun_Phrase.

Det -> [le].

Det -> [a].

nom -> [chat].

nom -> [Bat].

verbe -> [mange].

Cela génère des phrases telles que "le chat mange la batte", "une batte mange le chat". On peut générer toutes les expressions valides de la langue générée par cette grammaire à un interpréteur de prolog ...

De votre question, cela ressemble à ce que ce n'est pas vraiment ce que vous voulez faire. Mon conseil serait de créer simplement une classe qui détenait votre Dictionary OBJECT ET AVAIT UNE PROPOSITION TOSTRING () Méthode qui a renvoyé des données dans le format approprié. Ce serait beaucoup plus facile; -)

E.g.: xxx


0 commentaires

3
votes

Vous aurez besoin d'un outil appelé Rex. Eh bien, vous n'en avez pas «besoin», mais c'est ce que j'utilise: -)

http://research.microsoft.com/en-us/projects/rex /

Vous pouvez (bien que pas idéal), ajoutez l'EXE comme référence à votre projet et utilisez les classes rendues publiques.

Cela fonctionne assez bien.


4 commentaires

C'est une bonne idée de tester.


Excusez-moi, j'ai essayé de créer une implémentation exacte pour l'exemple de l'issue, alors je réfère Rex. Mais quelle classe dois-je utiliser pour spécifier les valeurs des groupes nommées? Je n'ai pu trouver que les types rexengine et rexsettings , mais je n'ai pas pu trouver de méthode de réglage des valeurs générant des cordes aléatoires pures. Pourrais-tu m'aider s'il te plait? :)


Il semble que Microsoft ait supprimé le binaire afin que vous ne puissiez plus le télécharger. C'est dommage :(


Il est toujours autour de sur ce lien