【问题标题】:How to get a list of specific words in a given sentence, that matches a particular pattern?如何获取给定句子中与特定模式匹配的特定单词列表?
【发布时间】:2018-05-12 14:01:12
【问题描述】:

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

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

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

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

这会很有帮助。谢谢。

【问题讨论】:

  • 旁注: 名称不应大写,除非它们是模块名称。 Ss.

标签: erlang phoenix-framework elixir


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    查看Regex 模块

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

    【讨论】:

    • 谢谢。像魅力一样工作!
    • @Shubh77 无论它是否适合您,您都应该通过单击左侧的绿色 ✓ 将答案标记为正确。
    • 略有改进(由于:first 而更快):~r/#\S+/ |&gt; Regex.scan("This is a #bad day for #trump #america", capture: :first) |&gt; List.flatten
    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多