2010-02-24 6 views
1

Je veux prendre la première valeur séparée par une virgule de cette chaîne.Comment puis-je prendre le premier mot dans une chaîne séparée par des virgules en utilisant l'expression régulière

"Lines.No;StartPos=3;RightAligned;MaxLength =2" 

J'utilisé "\b.*\;" regex prendre "Lines.No". Mais le résultat est

"Lines.No;StartPos=3;RightAligned;" 

merci.

+0

dernière fois que je vérifié ";" était un point-virgule. –

+1

Vous dites "première valeur séparée par des virgules", mais ne voulez-vous pas dire "valeur séparée par un premier point-virgule"? –

+2

La dernière fois que j'ai vérifié, le point-virgule n'était pas épelé avec un trait d'union. – Utensil

Répondre

4

D'abord, ancrez la recherche au début de la chaîne. Ensuite, utilisez un quantificateur paresseux: ^\b.*?; ou une classe de caractères nuls: ^\b[^;];

Mais attention: Les points-virgules peuvent-ils apparaître dans vos champs CSV (entre guillemets)? Si c'est le cas, les regex peuvent toujours être mis au travail, mais cela sera beaucoup plus compliqué - un analyseur CSV serait beaucoup mieux.

+0

merci pour votre réponse rapide. Mais le résultat est comme ça; Lignes.No; \ n StartPos = 3; \ n RightAligned; – mkus

+0

OK, vous devez probablement vous assurer que le moteur regex est ancré au début de la chaîne. J'ai édité ma réponse. –

2

Je sais que vous êtes à la recherche avant une expression régulière, mais si vous avez délimitée par une chaîne, utilisez votre fonction split de langue préférée(), par exemple en Python

>>> s="Lines.No;StartPos=3;RightAligned;MaxLength =2" 
>>> s.split(";")[0] 
'Lines.No' 

beaucoup plus simple que regex. De même, exploser() en PHP, split() en Perl, Split() en C#, etc

+1

+1. Je pense que l'utilisation de 'split 'dans ce cas rend le code un peu plus propre. Même les expressions régulières simples rendent le code un peu plus obtus, et je préférerais que les opérations soient exprimées dans des constructions plus explicites, si possible. Regex a sa place, mais pas comme un substitut à une simple scission(). –

1

Vous pouvez le faire de cette façon aussi, en python

>>> x="Lines.No;StartPos=3;RightAligned;MaxLength =2" 
>>> x[:x.find(";")] 
'Lines.No' 
Questions connexes