2009-06-24 7 views
2

J'ai une longue chaîne que j'ai besoin d'analyser dans un tableau de chaînes qui ne dépassent pas 40 caractères. La partie la plus difficile pour moi est de s'assurer que l'expression régulière trouve le dernier espace avant 40 caractères pour faire une pause nette entre les chaînes car je ne veux pas que les mots soient coupés.Parse une chaîne à une longueur spécifiée (sans mots de coupe)

+3

Quel est votre plan si le texte dépasse 40 caractères sans espace? –

+0

On dirait un emballage de mots pour moi. Cela pourrait être utile: http://blog.macromates.com/2006/wrapping-text-with-regular-expressions/ – Greg

Répondre

0

droit couper les sous-chaînes que vous allez:

(?<sub>.{1,40})(?:\s+|$)|(?<sub>.{40}) 

La première alternative pour tente une rupture nette, mais l'autre est là comme une solution de repli pour hacher aveuglément le cas échéant. Par la suite, les sous-chaînes sont disponibles en m.Groups["sub"].Captures.

9

Ce regex devrait faire le travail:

".{1,40}(|$)" 

(Les guillemets sont pour la chaîne littérale.)

Cela indique simplement l'analyseur de regex pour faire un match avide de tout carboniser entre 1 et 40 fois (c'est-à-dire autant que possible) avant de trouver un seul espace (ou la fin de la chaîne).

+0

Pour le plaisir j'ai essayé de l'implémenter sans Regex et le garçon était laid par rapport à ça. – Greg

+0

@Greg: Oui, exactement. Je ne suis pas quelqu'un de trop enthousiaste avec regex, mais c'est sûrement une situation où c'est hautement souhaitable! – Noldorin

Questions connexes