6
votes

Perl / Regex pour supprimer les 3 premières lignes et 3 dernières lignes d'une chaîne

Je cherchais à créer une déclaration de regex pour toujours supprimer les 3 premiers lignes de la chaîne et 3 dernières lignes de la chaîne (la partie médiane pourrait être n'importe quel numéro de contenu de lignes). Toute façon Nettoyante Regex à la recherche de cette sortie? (C'est-à-dire de dépouiller toujours nos 3 premières lignes et 3 dernières lignes de la chaîne - et préserve la partie centrale, qui pourrait être une variable # des lignes)

merci. p>

E.g. p>

chaîne d'entrée: strong> p> xxx pré>

à la chaîne de sortie souhaitée: strong> p>

"<1..n # of lines content>"


0 commentaires

3 Réponses :


-1
votes
for($teststring)
{
    s/<.*?>//g;
    $teststring =~ s%^(.*[\n\r]+){3}([.\n\r]).([\n\r]+){3}$%$2%;
    print "Outputstring" . "\n" . $teststring . "\n";
}
You need to test if it's under 6 lines, etc.

2 commentaires

Un problème avec cette approche est que si vous avez deux lignes ou plus consécutives dans une rangée qui serait vide si ce n'était pas pour leurs personnages «Newline», vous rencontrez des ennuis. [\ n \ r] + pourrait correspondre à n'importe quelle quantité de nouvelles lignes. Mieux vaut convertir la fin des lignes au système d'exploitation native, plutôt que d'essayer de permettre toute combinaison de \ r et \ n.


Utilisez simplement la nouvelle ligne généralisée \ R, alors vous n'avez pas à jouer à des jeux avec \ R et \ N, ce qui crée votre bogue.



4
votes

Cela devrait faire l'affaire. Vous devrez peut-être remplacer "\ n" avec "\ n" en fonction du format de nouvelle ligne de votre chaîne d'entrée. Cela fonctionnera indépendamment si la dernière ligne est terminée avec nouvelle ligne ou non.

a
b
c
d
e


0 commentaires

9
votes

Les solutions précédemment données sont vraiment complexes! Tous les besoins sont

s/^(?:.*\n){1,3}//;
s/(?:.*\n){0,2}.*\n?\z//;


2 commentaires

D'accord, c'est plus élégant. J'aime aussi le \ z, je ne le savais pas.


Excellent, merci à tous pour les suggestions. Cela a fonctionné comme un charme .. N'a pas connu à propos de \ z non plus. Vous apprenez quelque chose tous les jours!