2010-04-20 4 views
16

Je suis en train de trouver des mots commence par un caractère spécifique comme:Regex pour trouver les mots qui commencent par un caractère spécifique

Lorem ipsum #text Deuxième lorem ipsum. Comment # êtes-vous? C'est bon. Terminé. Quelque chose #else maintenant.

Je dois avoir tous les mots qui commencent par "#". donc mes résultats attendus sont #text, #are, #else

Des idées?

+2

vous a tagué cela avec C# et javascript. Où essayez-vous de faire cela? – womp

+0

va faire dans C# –

Répondre

29

Rechercher:

  • quelque chose qui est pas un caractère de mot, alors
  • #
  • certains caractères mot

Donc, essayez ceci:

/(?<!\w)#\w+/ 

Ou dans C# il ressemblerait à ceci:

string s = "Lorem ipsum #text Second lorem ipsum. How #are You. It's ok. Done. Something #else now."; 
foreach (Match match in Regex.Matches(s, @"(?<!\w)#\w+")) 
{ 
    Console.WriteLine(match.Value); 
} 

Sortie:

#text 
#are 
#else 
+1

Ah bonne prise ... Le mot limite ne fonctionnera pas avant le #, n'est-ce pas? Mais en javascript, vous ne pouvez pas faire de négatif-lookbehinds pouvez-vous? –

+0

@JeffB: Vous avez raison. Cela fonctionnera en C# bien. –

2

match un mot commençant par # après un espace blanc ou le début d'une ligne. La limite du dernier mot n'est pas nécessaire en fonction de votre utilisation.

/(?:^|\s)\#(\w+)\b/ 

Les parenthèses capturent votre mot dans un groupe. Maintenant, cela dépend de la façon dont vous appliquez cette regex.

Le (?:...) est un groupe non-capturant.

9

Essayez cette #(\S+)\s?

+0

Way plus simple, bon travail! –

+2

Cela renverra "#word" au lieu de "#word". Le \ s? n'est pas nécessaire – zincorp

+0

@zincorp thats pourquoi il y a un (1) groupe de grab 1 – Peter

Questions connexes