Question

J'ai vu quelques questions similaires, mais je suis en train d'y parvenir.

d'une chaîne, str = « La lune est notre satellite naturel, à savoir qu'il tourne autour de la Terre! » Je veux extraire les mots et les stocker dans un tableau. Les éléments du tableau attendus seraient cela.

the 
moon 
is 
our 
natural 
satellite 
i.e. 
it  
rotates 
around 
the 
earth

J'ai essayé d'utiliser String.split ( », '\ t', '\ r'), mais cela ne fonctionne pas correctement. J'ai aussi essayé de retirer le., Et d'autres signes de ponctuation mais je voudrais une chaîne comme « à savoir » être analysé trop. Quelle est la meilleure façon d'y parvenir? J'ai aussi essayé d'utiliser regex.split en vain.

string[] words = Regex.Split(line, @"\W+");

serait sûrement apprécier quelques coups de coude dans la bonne direction.

Était-ce utile?

La solution

Une solution regex.

(\b[^\s]+\b)

Et si vous vraiment voulez corriger cette dernière . sur i.e. vous pouvez utiliser.

((\b[^\s]+\b)((?<=\.\w).)?)

Voici le code que je utilise.

  var input = "The moon is our natural satellite, i.e. it rotates around the Earth!";
  var matches = Regex.Matches(input, @"((\b[^\s]+\b)((?<=\.\w).)?)");

  foreach(var match in matches)
  {
     Console.WriteLine(match);
  }

Résultats:

The
moon
is
our
natural
satellite
i.e.
it
rotates
around
the
Earth

Autres conseils

Je soupçonne que la solution que vous cherchez est beaucoup plus complexe que vous le pensez. Vous êtes à la recherche d'une certaine forme d'analyse linguistique proprement dite, ou au moins un dictionnaire, de sorte que vous pouvez déterminer si une période fait partie d'un mot ou se termine une phrase. Avez-vous considéré le fait qu'il peut faire les deux?

Pensez à ajouter un dictionnaire de mots autorisés « qui contiennent des signes de ponctuation. » Cela peut être le moyen le plus simple pour résoudre votre problème.

Cela fonctionne pour moi.

var str="The moon is our natural satellite, i.e. it rotates around the Earth!";
var a = str.Split(new char[] {' ', '\t'});
for (int i=0; i < a.Length; i++)
{
    Console.WriteLine(" -{0}", a[i]);
}

Résultats:

 -The
 -moon
 -is
 -our
 -natural
 -satellite,
 -i.e.
 -it
 -rotates
 -around
 -the
 -Earth!

vous pouvez faire un peu de post-traitement des résultats, la suppression des virgules et des points-virgules, etc.

Regex.Matches(input, @"\b\w+\b").OfType<Match>().Select(m => m.Value)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top