IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Regex + mots avant + mots après


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut Regex + mots avant + mots après
    Bonjour,

    Mieux vaut tard que jamais, je me mets un peu aux regex, d'autant que j'en ai besoin.
    Je fais souvent des recherches simples sur de longs textes, parfois un livre entier.
    Je voudrais sélectionner quelques mots avant et après la regex pour mieux me repérer dans le texte.

    Sans les mots Avant/Après ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sub Regex {
    	my $TexteInput = $widget_input->get( '1.0', 'end' );
    	my $Pattern = $Regex;
    	$LabRegex = $Pattern;
    	my $i = 0;
    	my @array = $TexteInput =~ /($Pattern)/g;
    	foreach my $Ligne ( @array ) {
    		$widget_output->insert( 'end', ++$i.": ".$Ligne."\n" );
    	}
    }
    Avec mots Avant/Après tel que je l'ai imaginé c'est pas bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    ...
    my $MotAvant   = "(\\w+ ){0,5}";
    my $MotApres   = "(\\w+ ){0,5}";
    ...
    sub Regex {
    	my $TexteInput = $widget_input->get( '1.0', 'end' );
    	my $Pattern = $MotAvant.$Regex.$MotApres;
     
    	$LabRegex = $Pattern;
    	my $i = 0;
    	my @array = $TexteInput =~ /($Pattern)/g;
    	foreach my $Ligne ( @array ) {
    		$widget_output->insert( 'end', ++$i.": ".$Ligne."\n" );
    	}
    }
    J'ai fait pas mal d'essais...

    Pour plus de facilité, je colle tout l'embryon de programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    #!/usr/bin/perl
    use warnings;
    use strict;
    use utf8;
    use Tk;
    use Tk::LabFrame;
    use Tk::ROText;
     
    my $RepBas     = 'E:/_APPLI/Regex';
    my $LabMessage = "";
    my $LabRegex   = "";
    my $MotAvant   = "(\\w+ ){0,5}";
    my $MotApres   = "(\\w+ ){0,5}";
     
    ActiverAccentsDOS();
     
    my $fen  = MainWindow->new;
    my $width = $fen->screenwidth();
    my $height = $fen->screenheight();
    $fen->destroy();
     
    # Creation du widget principal
    my $Wm = MainWindow->new(
    	-width			=> $width,
    	-height			=> $height,
    	-title      => "Regex",
      -background => 'white',
    );
     
    $width = $Wm->screenwidth*(4/5);
    $height = $Wm->screenheight*(4/5);
    $Wm->configure(-height=>$height, -width=>$width, -title=>"Recherche dans un fichier");
    $Wm->geometry( $width ."x". $height );
    $Wm->MoveToplevelWindow (100,100);
    #$Wm->overrideredirect(1);
    #$Wm->packPropagate(0);
    #$Wm->raise();
     
    ###############################
    # Scrolled qui affiche le texte
    my $widget_input = $Wm->Scrolled(
      'Text',
      -scrollbars => 'e',
      -takefocus  => 0,
      -font       => '{Simplified Arabic} 16 {bold}',
      -height     => '6',
      -wrap       => 'word',
      -relief     => 'groove',
      -background => '#ABFAA3',
    );
     
    my $widget_output = $Wm->Scrolled(
      'ROText',
      -scrollbars => 'e',
      -takefocus  => 0,
      -font       => '{Simplified Arabic} 16 {bold}',
      -height     => '6',
      -wrap       => 'word',
      -relief     => 'groove',
      -background => '#ABFA30',
    );
     
    # Cadre des configurations
    my $couleur_commune = '#E0F0FF';
     
    # Cadre Gestion
    my $cadre_gestion = $Wm->LabFrame(
      -label      => 'Gestion',
      -background => $couleur_commune,
      -font       => '{Simplified Arabic} 10 {bold}',
    );
    #configurer_tags($widget_input);
    #configurer_tags($widget_output);
     
    # Regex
    my $Regex = "";
    my $LabelRegex = $cadre_gestion->Label(
    	-text => "Regex",
    	-font => '{Simplified Arabic} 10 {bold}',
    );
     
    my $RegexSaisie = $cadre_gestion->Entry(
    	-width				=> 100,
    	-justify			=> 'left',
    	-textvariable	=> \$Regex,
    	-font					=> '{Simplified Arabic} 10 {bold}',
    );
     
    # Start
    my $bouton_start = $cadre_gestion->Button(
    	-text    => "Start",
    	-command => sub {
    		$widget_output->delete( '0.0', 'end' );
    		Regex ();
    		$LabMessage = "Regex terminée";
    	},
    );
     
    # Clear
    my $bouton_clear = $cadre_gestion->Button(
    	-text    => "Clear",
    	-command => sub {
    		$widget_input->delete( '0.0', 'end' );
    		$widget_output->delete( '0.0', 'end' );
    		$LabMessage = "";
    	},
    );
     
     
    # Exit
    my $bouton_exit = $cadre_gestion->Button(
    	-text    => "Exit",
    	-command => [ \&fermer, ],
    );
     
    ####################################
    # Cadre pour les messages de service
    my $cadre_messages = $Wm->Frame( -background => $couleur_commune, );
     
    # Label qui affichera la Regex, en bas
    my $label_regex = $cadre_messages->Label(
      -textvariable => \$LabRegex,
      -background  => '#FFE0D0',
      -relief      => 'groove',
    );
     
    # Label qui affichera les messages, en bas
    my $label_message = $cadre_messages->Label(
      -textvariable => \$LabMessage,
      -background  => '#FFE0D0',
      -relief      => 'groove',
    );
     
    ####################################
    # Gestion de l'affichage des widgets
    #
    $cadre_messages->pack(qw / -side bottom -fill both -expand 0 /);
    $label_regex->pack(qw / -side left -fill both -expand 1 /);
    $label_message->pack(qw / -side left -fill both -expand 1 /);
     
    $widget_output->pack(qw / -side bottom -fill both -expand 1 /);
    $widget_input->pack(qw / -side bottom -fill both -expand 1 /);
     
    $cadre_gestion->pack(qw / -side right -fill both -expand 1 /);
     
    $LabelRegex->grid( $RegexSaisie, $bouton_start, $bouton_clear, $bouton_exit,
    	qw / -padx 2 -pady 5 -sticky nsew /
    );
     
    MainLoop;
     
    #############################################################################
     
    sub Regex {
    	my $TexteInput = $widget_input->get( '1.0', 'end' );
    	#my $Pattern = $MotAvant.$Regex.$MotApres;
    	my $Pattern = $Regex;
    	$LabRegex = $Pattern;
    	my $i = 0;
    	my @array = $TexteInput =~ /($Pattern)/g;
    	foreach my $Ligne ( @array ) {
    		$widget_output->insert( 'end', ++$i.": ".$Ligne."\n" );
    	}
    }
     
    sub fermer {
    	exit (0);
    }
     
    #########################################
    # Configuration des polices de caractères
    #
    sub configurer_tags {
    	my $widget_text = shift;
    	for my $police ( 12 .. 72 ) {
    		if ( $police % 2 == 0 ) {
    			$widget_text->tagConfigure(
    				"g$police",
    				-background => '#ABFAA3',
    				-font      => "{Simplified Arabic} $police {bold}",
    				-justify    => 'left',
    			);
    			$widget_text->tagConfigure(
    				"c$police",
    				-background => '#ABFAA3',
    				-font      => "{Simplified Arabic} $police {bold}",
    				-justify    => 'center',
    			);
    			$widget_text->tagConfigure(
    				"d$police",
    				-background => '#ABFAA3',
    				-font      => "{Simplified Arabic} $police {bold}",
    				-justify    => 'right',
    			);
    		}
    	}
    	return;
    }
     
    #==============================================================
    # Pour avoir les accents sur la console DOS
    # http://perl.developpez.com/faq/perl/?page=Terminal#AccentsDOS
    #==============================================================
    sub ActiverAccentsDOS {
    	my $encodage;
    	# Windows
      	if ( lc($^O ) eq 'mswin32') {
    		eval {
    			my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
    			$encodage = "cp$codepage";
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
    	else {
    		$encodage = `locale charmap`;
    		eval {
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
      return $encodage;
    }
     
    #Sinon :
    #ü 	\x81 	à 	\x85 	è 	\x8A
    #é 	\x82 	ç 	\x87 	ï 	\x8B
    #â 	\x83 	ê 	\x88 	î 	\x8C
    #ä 	\x84 	ë 	\x89
    J'ai fait ce bout de code car je n'ai pas toujours le temps de transformer, même de façon rudimentaire un .txt en .html
    MERCI d'avance pour votre aide !

    J'ai adapté une extension Firefox, ça donne une idée de ce que je souhaite obtenir, en plus simple :

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $words = qr/\s*(?:\w+\s+){0,5}/;
    my @results = ($TextInput =~ m/($words $Regex $words)/gx);
    --
    Jedaï

  3. #3
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    MERCI Jedai !

    Ça me met bien le pied à l'étrier !
    Ce n'est pas régulier comme réponse, à cause des virgules, apostrophes... mais la solution est bien là !

    je recolle le tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    #!/usr/bin/perl
    use warnings;
    use strict;
    use utf8;
    use Tk;
    use Tk::LabFrame;
    use Tk::ROText;
     
    my $RepBas     = 'E:/_APPLI/Regex';
    my $LabMessage = "";
    my $LabRegex   = "";
    my $Word   = qr/\s*(?:\w+\s+){0,5}/;
     
    ActiverAccentsDOS();
     
    my $fen  = MainWindow->new;
    my $width = $fen->screenwidth();
    my $height = $fen->screenheight();
    $fen->destroy();
     
    # Creation du widget principal
    my $Wm = MainWindow->new(
    	-width			=> $width,
    	-height			=> $height,
    	-title      => "Regex",
      -background => 'white',
    );
     
    $width = $Wm->screenwidth*(4/5);
    $height = $Wm->screenheight*(4/5);
    $Wm->configure(-height=>$height, -width=>$width, -title=>"Recherche dans un fichier");
    $Wm->geometry( $width ."x". $height );
    $Wm->MoveToplevelWindow (100,100);
    #$Wm->overrideredirect(1);
    #$Wm->packPropagate(0);
    #$Wm->raise();
     
    ###############################
    # Scrolled qui affiche le texte
    my $widget_input = $Wm->Scrolled(
      'Text',
      -scrollbars => 'e',
      -takefocus  => 0,
      -font       => '{Simplified Arabic} 16 {bold}',
      -height     => '6',
      -wrap       => 'word',
      -relief     => 'groove',
      -background => '#ABFAA3',
    );
     
    my $widget_output = $Wm->Scrolled(
      'ROText',
      -scrollbars => 'e',
      -takefocus  => 0,
      -font       => '{Simplified Arabic} 16 {bold}',
      -height     => '6',
      -wrap       => 'word',
      -relief     => 'groove',
      -background => '#ABFA30',
    );
     
    # Cadre des configurations
    my $couleur_commune = '#E0F0FF';
     
    # Cadre Gestion
    my $cadre_gestion = $Wm->LabFrame(
      -label      => 'Gestion',
      -background => $couleur_commune,
      -font       => '{Simplified Arabic} 10 {bold}',
    );
    #configurer_tags($widget_input);
    #configurer_tags($widget_output);
     
    # Regex
    my $Regex = "";
    my $LabelRegex = $cadre_gestion->Label(
    	-text => "Regex",
    	-font => '{Simplified Arabic} 10 {bold}',
    );
     
    my $RegexSaisie = $cadre_gestion->Entry(
    	-width				=> 100,
    	-justify			=> 'left',
    	-textvariable	=> \$Regex,
    	-font					=> '{Simplified Arabic} 10 {bold}',
    );
     
    # Start
    my $bouton_start = $cadre_gestion->Button(
    	-text    => "Start",
    	-command => sub {
    		$widget_output->delete( '0.0', 'end' );
    		Regex ();
    		$LabMessage = "Regex terminée";
    	},
    );
     
    # Clear
    my $bouton_clear = $cadre_gestion->Button(
    	-text    => "Clear",
    	-command => sub {
    		$widget_input->delete( '0.0', 'end' );
    		$widget_output->delete( '0.0', 'end' );
    		$LabMessage = "";
    	},
    );
     
     
    # Exit
    my $bouton_exit = $cadre_gestion->Button(
    	-text    => "Exit",
    	-command => [ \&fermer, ],
    );
     
    ####################################
    # Cadre pour les messages de service
    my $cadre_messages = $Wm->Frame( -background => $couleur_commune, );
     
    # Label qui affichera la Regex, en bas
    my $label_regex = $cadre_messages->Label(
      -textvariable => \$LabRegex,
      -background  => '#FFE0D0',
      -relief      => 'groove',
    );
     
    # Label qui affichera les messages, en bas
    my $label_message = $cadre_messages->Label(
      -textvariable => \$LabMessage,
      -background  => '#FFE0D0',
      -relief      => 'groove',
    );
     
    ####################################
    # Gestion de l'affichage des widgets
    #
    $cadre_messages->pack(qw / -side bottom -fill both -expand 0 /);
    $label_regex->pack(qw / -side left -fill both -expand 1 /);
    $label_message->pack(qw / -side left -fill both -expand 1 /);
     
    $widget_output->pack(qw / -side bottom -fill both -expand 1 /);
    $widget_input->pack(qw / -side bottom -fill both -expand 1 /);
     
    $cadre_gestion->pack(qw / -side right -fill both -expand 1 /);
     
    $LabelRegex->grid( $RegexSaisie, $bouton_start, $bouton_clear, $bouton_exit,
    	qw / -padx 2 -pady 5 -sticky nsew /
    );
     
    MainLoop;
     
    #############################################################################
     
    sub Regex {
    	my $TexteInput = $widget_input->get( '1.0', 'end' );
    	#my $Pattern = $MotAvant.$Regex.$MotApres;
    	my $Pattern = $Regex;
    	$LabRegex = $Pattern;
    	my $i = 0;
    	my @array = ($TexteInput =~ m/($Word $Regex $Word)/gx);
    	foreach my $Ligne ( @array ) {
    		$widget_output->insert( 'end', ++$i.": ".$Ligne."\n" );
    	}
    }
     
    sub fermer {
    	exit (0);
    }
     
    #########################################
    # Configuration des polices de caractères
    #
    sub configurer_tags {
    	my $widget_text = shift;
    	for my $police ( 12 .. 72 ) {
    		if ( $police % 2 == 0 ) {
    			$widget_text->tagConfigure(
    				"g$police",
    				-background => '#ABFAA3',
    				-font      => "{Simplified Arabic} $police {bold}",
    				-justify    => 'left',
    			);
    			$widget_text->tagConfigure(
    				"c$police",
    				-background => '#ABFAA3',
    				-font      => "{Simplified Arabic} $police {bold}",
    				-justify    => 'center',
    			);
    			$widget_text->tagConfigure(
    				"d$police",
    				-background => '#ABFAA3',
    				-font      => "{Simplified Arabic} $police {bold}",
    				-justify    => 'right',
    			);
    		}
    	}
    	return;
    }
     
    #==============================================================
    # Pour avoir les accents sur la console DOS
    # http://perl.developpez.com/faq/perl/?page=Terminal#AccentsDOS
    #==============================================================
    sub ActiverAccentsDOS {
    	my $encodage;
    	# Windows
      	if ( lc($^O ) eq 'mswin32') {
    		eval {
    			my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
    			$encodage = "cp$codepage";
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
    	else {
    		$encodage = `locale charmap`;
    		eval {
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
      return $encodage;
    }
     
    #Sinon :
    #ü 	\x81 	à 	\x85 	è 	\x8A
    #é 	\x82 	ç 	\x87 	ï 	\x8B
    #â 	\x83 	ê 	\x88 	î 	\x8C
    #ä 	\x84 	ë 	\x89
    [Edit 21:57] Le texte en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    DE L'AMITIÉ
     
    1. Considérant la conduite de la besogne d'un peintre, que j'ai, il m'a pris envie de l'ensuivre. Il choisit le plus bel endroit et milieu de chaque paroi, pour y loger un tableau élaboré de toute sa suffisance : Et le vide tout autour, il le remplit de crotesques, qui sont peintures fantasques, n'ayant grâce qu'en la variété et étrangeté. Que sont-ce ici aussi à la vérité que crotesques et corps monstrueux, rapiécés de divers membres, sans certaine figure, n'ayant ordre, suite, ni proportion que fortuite ?
     
    «Une femme belle de buste s'achève en poisson».
     
    2. Je vais bien jusques à ce second point, avec mon peintre : mais je demeure court en l'autre, et meilleure partie : Car ma suffisance ne va pas si avant, que d'oser entreprendre un tableau riche, poli et formé selon l'art. Je me suis avisé d'en emprunter un d'Estienne de la Boétie, qui honorera tout le reste de cette besogne. C'est un discours auquel il donna nom. La Servitude volontaire : Mais ceux qui l'ont ignoré, l'ont bien proprement depuis rebaptisé, Le Contre un. Il l'écrivit par manière d'essai, en sa première jeunesse, à l'honneur de la liberté contre les tyrans. Il court piéça ès mains des gens d'entendement, non sans bien grande et méritée recommandation : car il est gentil, et plein ce qu'il est possible. Si y a-il bien à dire, que ce ne soit le mieux qu'il pût faire : et si en l'âge que je l'ai connu plus avancé, il eût pris un tel dessein que le mien, de mettre par écrit ses fantaisies, nous verrions plusieurs choses rares, et qui nous approcheraient bien près de l'honneur de l'antiquité : Car notamment en cette partie des dons de nature, je n'en connais point qui lui soit comparable.
     
    3. Mais il n'est demeuré de lui que ce discours, encore par rencontre, et crois qu'il ne le vit onques depuis qu'il lui échappa : et quelques mémoires sur cet édit de Janvier fameux par nos guerres civiles, qui trouveront encore ailleurs peut-être leur place. C'est tout ce que j'ai pu recouvrer de ses reliques, Moi, qu'il laissa d'une si amoureuse recommandation, la mort entre les dents, par son testament héritier de sa bibliothèque et de ses papiers : outre le livret de ses œuvres que j'ai fait mettre en lumière. Et si suis obligé particulièrement à cette pièce, d'autant qu'elle a servi de moyen à notre première accointance. Car elle me fut montrée longue pièce avant que je l'eusse vu, et me donna la première connaissance de son nom, acheminant ainsi cette amitié, que nous avons nourrie, tant que Dieu a voulu, entre nous, si entière et si parfaite, que certainement il ne s'en lit guère de pareilles, et entre nos hommes il ne s'en voit aucune trace en usage. Il faut tant de rencontres à la bâtir, que c'est beaucoup si la fortune y arrive une fois en trois siècles.
     
    4. Il n'est rien à quoi il semble que nature nous ait plus acheminé qu'à la société : et dit Aristote que les bons législateurs ont eu plus de soin de l'amitié que de la justice. Or le dernier point de sa perfection est cetui-ci. Car en général toutes celles que la volupté ou le profit : le besoin public ou privé forge et nourrit : en sont d'autant moins belles et généreuses, et d'autant moins amitiés, qu'elles mêlent autre cause et but et fruit en l'amitié qu'elle-même. Ni ces quatre espèces anciennes : naturelle, sociale, hospitalière, vénérienne, particulièrement n'y conviennent, ni conjointement.
     
    5. Des enfants aux pères, c'est plutôt respect. L'amitié se nourrit de communication, qui ne peut se trouver entre eux, pour la trop grande disparité, et offenserait à l'aventure les devoirs de nature : Car ni toutes les secrètes pensées des pères ne se peuvent communiquer aux enfants, pour n'y engendrer une messéante privauté : ni les avertissements et corrections, qui est un des premiers offices d'amitié, ne se pourraient exercer des enfants aux pères. Il s'est trouvé des nations, où par usage les enfants tuaient leurs pères : et d'autres, où les pères tuaient leurs enfants, pour éviter l'empêchement qu'ils se peuvent quelquefois entreporter, et naturellement l'un dépend de la ruine de l'autre : Il s'est trouvé des philosophes dédaignant cette couture naturelle : témoin Aristippus : quand on le pressait de l'affection qu'il devait à ses enfants pour être sortis de lui, il se mit à cracher : disant que cela en était aussi bien sorti : que nous engendrions bien des poux et des vers. Et cet autre que Plutarque voulait induire à s'accorder avec son frère. Je n'en fais pas, dit-il, plus grand état, pour être sorti de même trou.
     
    6. C'est à la vérité un beau nom, et plein de dilection que le nom de frère, et à cette cause en fîmes-nous lui et moi notre alliance : Mais ce mélange de biens, ces partages, et que la richesse de l'un soit la pauvreté de l'autre, cela détrempe merveilleusement et relâche cette soudure fraternelle : Les frères ayant à conduire le progrès de leur avancement, en même sentier et même train, il est force qu'ils se heurtent et choquent souvent. Davantage, la correspondance et relation qui engendre ces vraies et parfaites amitiés, pourquoi se trouvera-t-elle en ceux-ci ? Le père et le fils peuvent être de complexion entièrement éloignée, et les frères aussi : C'est mon fils, c'est mon parent : mais c'est un homme farouche, un méchant, ou un sot.
     
    7. Et puis, à mesure que ce sont amitiés que la loi et l'obligation naturelle nous commande, il y a d'autant moins de notre choix et liberté volontaire : Et notre liberté volontaire n'a point de production qui soit plus proprement sienne, que celle de l'affection et amitié. Ce n'est pas que je n'aie essayé de ce côté-là, tout ce qui en peut être, Ayant eu le meilleur père qui fut onques, et le plus indulgent, jusques à son extrême vieillesse, et étant d'une famille fameuse de père en fils, et exemplaire en cette partie de la concorde fraternelle,
     
    «et étant moi-même connu pour l'affection paternelle que j'éprouve à l'égard de mes frères».
     
    8. D'y comparer l'affection envers les femmes, quoiqu'elle naisse de notre choix, on ne peut, ni la loger en ce rôle. Son feu, je le confesse,
     
    «et en effet elle ne nous est pas inconnue, la déesse qui aux soucis mélange une douce amertume»,
     
    est plus actif, plus cuisant, et plus âpre. Mais c'est un feu téméraire et volage, ondoyant et divers, feu de fièvre, sujet à accès et remises, et qui ne nous tient qu'à un coin. En l'amitié, c'est une chaleur générale et universelle, tempérée au demeurant et égale, une chaleur constante et rassise, toute douceur et polissure, qui n'a rien d'âpre et de poignant.
     
    9. Qui plus est en l'amour ce n'est qu'un désir forcené après ce qui nous fuit,
     
    «Comme le chasseur suit le lièvre dans le froid, dans la chaleur, sur la montagne, sur le rivage, mais n'en fait plus cas dès qu'il est pris, et ne presse le pas qu'à la poursuite de ce qui s'enfuit.».
     
    10. Aussitôt qu'il entre aux termes de l'amitié, c'est-à-dire en la convenance des volontés, il s'évanouit et s'alanguit : La jouissance le perd, comme ayant la fin corporelle et sujette à satiété. L'amitié au rebours, est jouie à mesure qu'elle est désirée, ne s'élève, se nourrit, ni ne prend accroissance qu'en la jouissance, comme étant spirituelle, et l'âme s'affinant par l'usage. Sous cette parfaite amitié, ces affections volages ont autrefois trouvé place chez moi, afin que je ne parle de lui, qui n'en confesse que trop par ces vers. Ainsi ces deux passions sont entrées chez moi en connaissance l'une de l'autre, mais en comparaison jamais : La première maintenant sa route d'un vol hautain et superbe, et regardant dédaigneusement cette-ci passer ses pointes bien loin au-dessous d'elle.

    Un gros MERCI déjà :

  4. #4
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Bonjour,
    Pour info je pense avoir (entre autre) un pb de codification avec les caractères accentués dans le ScrolledText et leur reconnaissance dans la regex, même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TexteInput = encode("iso-8859-16", $TexteInput);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub Regex {
    	my $TexteInput = $widget_input->get( '1.0', 'end' );
    	$TexteInput = encode("iso-8859-16", $TexteInput);
    	my $Pattern = $Regex;
    	$LabRegex = $Pattern;
    	my $i = 0;
    	my @array = ($TexteInput =~ m/($Word$Regex$Word)/gx);
    	foreach my $Ligne ( @array ) {
    		$widget_output->insert( 'end', ++$i.": ".$Ligne."\n" );
    	}
    }
    Bon je recherche...

    [Edit 06:56] Correction, non c'est bien la ponctuation qui cause le plus de soucis, Ex :

  5. #5
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Bon j'avance, mais avec des quantificateurs gourmands, et ce n'est pas tip top !
    Pas facile (pour moi) de prendre en compte tous les cas de ponctuation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    my $Point  = qr/(?:\s*\W*\s*){0,}/;
    my $Word   = qr/\s*(?:\w*\s*){0,5}/;
     
    ...
     
    sub Regex {
    	my $TexteInput = $widget_input->get( '1.0', 'end' );
    	my $Pattern = qr/$Word$Point$Regex$Point$Word/;
    	$LabRegex = $Pattern;
    	my $i = 0;
    	my @array = ($TexteInput =~ m/($Pattern)/gx);
    	foreach my $Ligne ( @array ) {
    		$widget_output->insert( 'end', ++$i.": ".$Ligne."\n" );
    	}
    }
    J'obtiens de meilleurs temps de réponse dans le Addon Firefox où les mots Avant et Après ne sont pas gérés en regex mais à partir d'un intervalle autour de l'expression recherchée.
    Je le passe en résolu mais si vous avez mieux, je suis preneur ceci dit ne vous y cassez pas la tête

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Suggestion : en réalité tu ne souhaites pas particulièrement avoir un nombre de mots autour du pattern, tu souhaites plutôt avoir un "contexte" de longueur à peu près constante, et tu souhaiterais qu'il ne s'arrête pas au milieu d'un mot, n'est-ce pas ?
    Dans ce cas la regex suivante est plus appropriée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m/(\b.{0,40}$Regex.{0,40}\b)/
    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Couper une chaine avant et apres un mot
    Par lelectronique.com dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2011, 14h36
  2. Réponses: 3
    Dernier message: 05/11/2006, 20h57
  3. Réponses: 1
    Dernier message: 10/09/2006, 13h23
  4. extraire que les mots avant une virgule
    Par lionski dans le forum Access
    Réponses: 6
    Dernier message: 03/08/2006, 16h19
  5. [Regex]Recherche de mots dans une chaîne
    Par lionel69 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 17/11/2005, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo