0
votes

Comment devrait-être la regex pour alphanumérique où l'alphabet uniquement avec des combinaisons de "w" ou "d" ou "h"

J'ai besoin de la regex pour valider la chaîne entrée de l'utilisateur, la chaîne peut être des formats suivants.

EX: 1w 2D 1H ou 2W 1H ou 1w 2d . De même, des combinaisons de chiffres et W, D et H.

Je cherche la regex pour autoriser le numéro de combinaisons et w ou d ou h . .

est-il possible d'avoir une regex comme ça?


8 commentaires

Vous devriez essayer de le faire en premier et montrez-nous vos résultats, même si cela ne fonctionne pas :)


\ D + W \ S \ D + D \ S \ D + H | \ D + W \ S \ D + D


Je ne vois pas un moyen de faire cela en utilisant une expression pure regex. Essayez peut-être de fractionnement dans l'espace, puis vérifiez chaque composant séparément.


Donc, vous voulez une combinaison?


Merci à tous pour la réponse rapide ...


@Thegeneral, oui je veux une combinaison de nombre avec W, D et H ...


Voulez-vous une commande? ou w -> d -> h


@Thegeneral, oui ID W et D Existez, le W devrait venir en premier, il devrait venir dans une ordonnance de w d h jour de la semaine d'heure


5 Réponses :


2
votes

Nous pouvons essayer d'écrire un analyseur rudimentaire pour vérifier la chaîne d'entrée.

string input = "1w 2d 1h";
string[] parts = Regex.Split(input, @"\s+");
bool success = true;

if (parts.Length > 3)
{
    success = false;
}
else
{
    Regex regex = new Regex(@"\d+(?:w|d|h)");
    foreach (string part in parts)
    {
        Match match = regex.Match(part);
        if (!match.Success)
        {
            success = false;
        }
    }
}

if (success)
{
    Console.WriteLine("MATCH");
}
else
{
    Console.WriteLine("NO MATCH");
}


0 commentaires

3
votes

Vous pourriez dire que vous voulez

  • \ d + n'importe quel nombre, 1 ou plusieurs fois
  • [wdh] l'un des w, d, h
  • (?: | $) espace ou fin de chaîne

    Puis placez ceci dans un groupe, en boucle 1 ou plus fois

    • (?: Début du groupe non-capture
    • ) + fin du groupe non-capture, 1 ou plusieurs fois
    • ^ et $ début et fin de chaîne respectivement

      résultat xxx

      EDIT: Je vois que vous avez ajouté plus d'exigences dans les commentaires de votre question, cette regex ne remplira pas vos dernières exigences < / p>


1 commentaires

Merci pour la façon dont je vais essayer de le faire comme de mes besoins :-)



0
votes

Essayez ^ (?: \ d + w?)? (?: \ d + d?)? (?: \ d + h)? $

Explantation:

^ - correspondre au début d'une chaîne

(?: ...) - groupe non capturant

\ d + - correspond à un ou plusieurs chiffres

w , d , h - correspondez littéralement w , d , h respectivement

? - Correspondre à un modèle de précédent zéro ou une fois

Démo



0
votes

Enfin, la chaîne suivante semble fonctionner correctement pour moi ... XXX

Merci, tout le monde pour aider.


0 commentaires

0
votes

Cela fonctionne pour votre besoin. J'espère que cela t'aides! Commande ( w-> d-> h ) garantie. xxx

cas de test:

10W 12D 11H

1W 2D

2W 1H

1D 1H

1D 1H

3W 2H


0 commentaires