Erlang 如何获得给定句子中与特定模式匹配的特定单词列表?

Erlang 如何获得给定句子中与特定模式匹配的特定单词列表?,erlang,phoenix-framework,elixir,Erlang,Phoenix Framework,Elixir,我不熟悉Elixir,不确定它的字符串匹配功能。 我正在尝试编写一个elixir函数,它接受字符串S作为输入,基本上只是一条tweet,并输出其中包含hashtag(#)的所有单词 那会很有帮助的。谢谢。查看模块 完成此任务的快速且灵丹妙药的方法是在过滤器中进行模式匹配: "This is a #bad day for #trump #america" |> String.split() |> Enum.filter(fn <<"#", _ :: binary

我不熟悉Elixir,不确定它的字符串匹配功能。 我正在尝试编写一个elixir函数,它接受字符串S作为输入,基本上只是一条tweet,并输出其中包含hashtag(#)的所有单词

那会很有帮助的。谢谢。

查看模块


完成此任务的快速且灵丹妙药的方法是在过滤器中进行模式匹配:

"This is a #bad day for #trump #america"
|> String.split()
|> Enum.filter(fn 
     <<"#", _ :: binary>> -> true
     _ -> false
   end)
#⇒ ["#bad", "#trump", "#america"]
“今天对特朗普美国来说是糟糕的一天”
|>String.split()
|>枚举过滤器(fn
->真的
_->错误
(完)
#⇒[“坏”、“特朗普”、“美国”]

谢谢。工作起来很有魅力@Shubh77无论它是否适用于您,您都应该单击绿色图标将答案标记为正确✓ 左边。稍有改进(由于
:first
),速度更快):
~r/#\S+/|>Regex.scan(“这对#特朗普#美国#来说是糟糕的一天”,capture::first)|>列表。展平
。旁注:除非是模块名,否则名称不应大写<代码>S⇒ <代码>s。
iex> ~r/#[^\s]+/ 
     |> Regex.scan("This is a #bad day for #trump #america") 
     |> Enum.map(&hd/1)

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