2010-09-16 6 views
1

J'essaie d'analyser certains fichiers texte dans une base de données et il y a une chaîne qui contient 2 éléments d'information. Il y a quelques options pour ce à quoi la chaîne peut ressembler. Il peut ressembler à un seul mot Word ou il peut avoir ce premier mot, suivi d'un tiret, suivi d'un certain nombre d'autres mots comme Word - Second. La clé cependant, est que SI la chaîne se termine par un nombre comme Word - Second 4 ou deux nombres séparés par une barre oblique comme Word - Second 2/3 alors ces nombres doivent être mis dans une variable différente. Je ne sais pas assez sur regex pour faire celui-ci. Aidez-moi? (? Avec des explications)Regex pour comprendre une chaîne complexe

Répondre

2

Je pense que vous cherchez peut-être quelque chose comme ceci:

^([a-zA-Z]+(?: *- *[a-zA-Z]+(?: +[a-zA-Z]+)*)?)(?: +(\d+(?:\/\d+)?))?$ 

Explication:

 
^    Start of line 
(    First capturing group (for the words) 
    [a-zA-Z]+  A word 
    (?:...)?  (Omitted for clarity) 
)    Close first group 
(?:    Start non-capturing group 
    \s+   Some whitespace 
    (   Second capturing group (for the numbers) 
    \d+   A number 
    (?:\/\d+)? Optionally a slash followed by another number 
)    Close capturing group 
)?    Close optional non-capturing group 
$    End of line 

J'omis une explication de cette partie ci-dessus: (?: *- *[a-zA-Z]+(?: +[a-zA-Z]+)*)?. Il correspond à un tiret suivi d'un ou plusieurs mots séparés par des espaces. J'ai également écrit \s dans l'explication au lieu de parce que l'espace est invisible. Mais \s correspond à n'importe quel espace, y compris les nouvelles lignes. Vous préférerez peut-être faire correspondre uniquement des espaces.

Rubular

+0

Vous devriez échapper vos barres obliques. –

+0

Umm ... ouais ... ça n'a aucun sens pour moi. En espérant que cela fonctionne! –

+0

A dû échapper à la barre oblique comme Stefan l'a dit, ce qui m'a fait réaliser que je ne fournissais pas assez d'informations. Je n'ai pas besoin de trouver les chaînes qui correspondent à ces critères, j'ai besoin de trouver les numéros à l'intérieur de ces chaînes et les retirer. –

Questions connexes