Comment puis-je imprimer les lignes qui correspondent à un modèle en Perl?
En supposant file.txt
a juste une phrase par ligne comme suit:
John Depp est un mec génial. Il est très intelligent. Il peut faire quelque chose. Venez rencontrer Jean-Depp.
Le code Perl est comme suit:-
open ( FILE, "file.txt" ) || die "can't open file!";
@lines = <FILE>;
close (FILE);
$string = "John Depp";
foreach $line (@lines) {
if ($line =~ $string) { print "$line"; }
}
La sortie va être la première et la quatrième ligne.
Je veux faire ce travail pour le fichier aléatoire de sauts de ligne plutôt que d'une phrase anglaise par ligne. Je veux dire, il devrait également fonctionner pour les éléments suivants:-
John Depp est un mec génial. Il est très intelligent. Il peut faire quelque chose. Venez rencontrer Jean-Depp.
La sortie doit être en premier et quatrième phrases.
Des idées s'il vous plaît?
Un problème potentiel qui j'ai récemment appris que j'avais été faire du mal moi-même: quand vous faites un dé déclaration, il doit être "ou mourir" et non "|| die", parce qu'ils ont différents priorité. Il travaillera dans ce cas, car il n'y a qu'une seule déclaration et qu'il ne peut pas être regroupés avec d'autre chose. Mais vous devriez utiliser "or die" partout de toute façon.
Dans ce cas, l'OP est bien parce que les parenthèses utilisées dans le
Vous avez raison, bien sûr. Je n'ai pas vraiment regarder la plupart du code, j'ai juste jeté un coup d'oeil à elle et j'ai pensé jeter dedans.
double possible de stackoverflow.com/questions/1809469/...
Dans ce cas, l'OP est bien parce que les parenthèses utilisées dans le
open
appel. Un problème plus grave est complètement inutile d'aspirer du fichier. Aussi, le die
message doit inclure le nom du fichier et le message d'erreur $!
. En outre, à l'aide de descripteurs lexicaux et les trois-argument forme de open
rendrait le code en ligne avec ce qui est considéré comme la meilleure pratique.Vous avez raison, bien sûr. Je n'ai pas vraiment regarder la plupart du code, j'ai juste jeté un coup d'oeil à elle et j'ai pensé jeter dedans.
double possible de stackoverflow.com/questions/1809469/...
OriginalL'auteur kivien | 2010-04-01
Vous devez vous connecter pour publier un commentaire.
Plus simple: si vous assumez les "phrases" sont séparés par des points, alors vous pouvez l'utiliser comme séparateur de champ:
Bien sûr. Mais, qu'attendez-vous de l'idéal du code perl de sortie compte tenu de cette entrée? "John Depp est un mec génial. Il peut faire quelque chose. Venez rencontrer M. John Depp. Il est très intelligent. "? Ne vous attendez perl "sais" que "Venir à la rencontre de M. John Depp." est une phrase ? Comment?
C'est que j'étais assumming que l'auteur cherchait juste pour une regex solution (tagged 'regex') dans quel cas on doit faire une simple hypothèse sur la façon dont les phrases sont séparées. Si ce n'est pas suffisant (dans la vraie anglais, il ne l'est pas), on doit recourir à une bibliothèque qui connaît le intrincancies de l'anglais la langue écrite - comme vous l'avez souligné (Lingua::Phrase)
OriginalL'auteur leonbloy
Tout d'abord, notez que le nom de l'acteur célèbre est Johnny Depp.
Deuxième, essayer de comprendre ce qu'est une phrase, et ce n'est pas n'est difficile. Je vais tricher et utiliser Lingua::Phrase:
De sortie:
OriginalL'auteur Sinan Ünür
En supposant que vous avez votre contenu dans une chaîne de caractères:
Résultat:
Vous pouvez modifier la regex si vous voulez extraire uniquement la partie intéressante, à l'instar de:
Résultat:
OriginalL'auteur lepe
une façon
sortie
John\nDepp eats with scissors.
dans votre dossier?il y a beaucoup de ce si vrai? ne me demandez pas, demandez à l'OP.
OriginalL'auteur ghostdog74
Par défaut les variables peuvent obtenir assommé si on n'est pas prudent. Donc nommer tout ce qui est une bonne idée.
Cela devrait vous aider à démarrer:
Utilisation:
OriginalL'auteur Alex Reynolds
Regardant votre code d'origine plutôt que spécifiquement pour répondre à votre question. Il est généralement une mauvaise idée de lire tout le fichier en mémoire que vous devez. Vous pouvez traiter un fichier ligne par ligne comme
OriginalL'auteur justintime