2017-11-29 3 views
2

Ich bin neu bei Elixir und bin mir seiner String-Matching-Funktionalitäten nicht sicher. Ich versuche, ein Elixier Funktion zu schreiben, die einen String S als Eingabe akzeptiert, die im Grunde nur ein Tweet ist und gibt alle Wörter es, die einen Hashtag (#) enthältWie bekomme ich eine Liste bestimmter Wörter in einem bestimmten Satz, der mit einem bestimmten Muster übereinstimmt?

S = "This is a #bad day for #trump #america" 

def get_hashtags(S) 
....... 
end 

Output : ["#bad", "#trump", "#america"] 

Es wäre von tolle Hilfe. Vielen Dank.

+0

_Sidenote: _ Namen sollten nicht, wenn sie nicht aktiviert werden sind Modulnamen. 'S' ⇒' s'. – mudasobwa

Antwort

1

Schauen Sie sich die Regex Modul

iex> ~r/#[^\s]+/ 
    |> Regex.scan("This is a #bad day for #trump #america") 
    |> Enum.map(&hd/1) 

["#bad", "#trump", "#america"] 
+0

Danke. Klappt wunderbar! – Shubh77

+0

@ Shubh77 ob es für Sie funktionierte, sollten Sie die Antwort als richtig markieren, indem Sie auf ein grünes ✓ auf der linken Seite klicken. – mudasobwa

+1

Etwas verbessert (und schneller wegen ': first'):' ~ r/# \ S +/|> Regex.scan ("Dies ist ein #bad Tag für #trump #america", capture:: zuerst) |> Liste .flatten'. – mudasobwa

1

Die schnelle und elixirish Weg, um diese Aufgabe zu erfüllen, um Mustererkennung im Filter sein würde:

"This is a #bad day for #trump #america" 
|> String.split() 
|> Enum.filter(fn 
    <<"#", _ :: binary>> -> true 
    _ -> false 
    end) 
#⇒ ["#bad", "#trump", "#america"] 
Verwandte Themen