J'ai une chaîne où différents mots-clés prédéfinis introduisent des données différentes. Y at-il un moyen de le faire en utilisant une utilisation intelligente de regexp, ou quelque chose? Voici un exemple: Les mots-clés peuvent être "first name: "
et "last name: "
. Maintenant, je veux analyser:Comment puis-je analyser une chaîne dans un hachage en utilisant des mots-clés dans Perl?
"character first name: Han last name: Solo"
dans
{ "first name: " => "Han ", "last name: " => "Solo" }
Bien sûr, l'ordre des mots-clés dans la chaîne d'entrée n'est pas fixée. Cela devrait également fonctionner sur:
"character last name: Solo first name: Han"
Je comprends qu'il y a des problèmes à soulever avec les espaces et ainsi de suite. Je vais les ignorer ici.
Je sais comment résoudre ce problème en bouclant sur les différents mots-clés, mais je ne trouve pas cela très joli.
Split fait presque l'affaire. Son seul problème est qu'il retourne un tableau et non un hachage, donc je ne sais pas quel est le prénom ou le nom de famille.
Mon exemple est quelque peu trompeur. Voici un autre:
my @keywords = ("marker 1", "marker 2", "marker 3");
my $rawString = "beginning marker 1 one un marker 2 two deux marker 3 three trois and the rest";
my %result;
# <grind result>
print Dumper(\%result);
imprimera:
$VAR1 = {
'marker 2' => ' two deux ',
'marker 3' => ' three trois and the rest',
'marker 1' => ' one un '
};
Peut-il y avoir plusieurs prénoms et noms comme 'Jean Marc' ou 'Syu Kyi'? – Zaid
Oui. L'exemple utilise des noms, mais il s'agit en réalité d'un problème de chaîne: il correspond aux chaînes de marqueur et renvoie tous les caractères entre les valeurs du marqueur précédent. –