Expression régulière pour trouver du texte non brisé et insérer de l’espace

Je construis un forum et il est en version bêta pour le moment. Les utilisateurs ont commencé à exploiter certaines choses, telles que la publication de longues chaînes de texte sans espaces, qui allongeraient l’écran et ruineraient le style. Je viens de commencer à utiliser ce code et cela fonctionne bien.

int charIndex = 0; int noSpaceCount = 0; foreach (char c in text.ToCharArray()) { if (c != ' ') noSpaceCount++; else noSpaceCount = 0; if (noSpaceCount > 150) { text = text.Insert(charIndex, " "); noSpaceCount = 0; } charIndex++; } 

Ce code fonctionne mais je préférerais une expression régulière si possible. Le problème est que je vais utiliser des expressions régulières pour identifier les liens et que je ne veux pas rompre les liens longs avec un espace, car ceux-ci seront corrigés en rendant le texte de l’affichage abrégé. Donc, je ne veux pas insérer d’espace dans un morceau de texte qui s’identifie comme une URL, mais je veux insérer un espace tous les 150 caractères de texte non rompu, sans lien.

Aucune suggestion?

C’était étonnamment compliqué. Merci à Eric et à mes collègues pour l’excellente bibliothèque de regex .NET.

 resultSsortingng = Regex.Replace(subjectSsortingng, @"(?<= # Assert that the current position follows... \s # a whitespace character | # or ^ # the start of the string | # or \G # the end of the previous match. ) # End of lookbehind assertion (?!(?:ht|f)tps?://|www\.) # Assert that we're not at the start of a URL. (\S{150}) # Match 150 characters, capture them.", "$1 ", RegexOptions.IgnorePatternWhitespace); 

remplacez "([^ ]{150}) ” par "\1 " globalement (modifiez en fonction de votre saveur de regex)