【发布时间】:2020-01-27 06:41:59
【问题描述】:
我有一个字符串列表
>> list = ["h3llo","899","3@"]
如果列表元素至少有 1 个字母或特殊字符,则将其视为 :text,否则为 :number
>> list = [:text, :number, :text]
我该怎么做?
【问题讨论】:
我有一个字符串列表
>> list = ["h3llo","899","3@"]
如果列表元素至少有 1 个字母或特殊字符,则将其视为 :text,否则为 :number
>> list = [:text, :number, :text]
我该怎么做?
【问题讨论】:
您可以使用String.contains? 效果很好,请参考文档中提取的一个示例:
String.contains?("elixir of life", "of")
【讨论】:
另一种方法是简单的正则表达式
iex> Regex.match?(~r/^\d+$/, "h3llo")
false
iex> Regex.match?(~r/^\d+$/, "899")
true
iex> Regex.match?(~r/^\d+$/, "3@")
false
【讨论】:
if str =~ ~r/[^\d]/, do: :text, else: :number。我不建议使用正则表达式的原因是因为我认为尽可能使用内置的解析功能会更好,而且正则表达式很难阅读并且很快就会变得丑陋。我也做了一些基准测试,正则表达式似乎比整数解析慢 4-5 倍。
一种方法是使用Integer.parse/2:
case Integer.parse(str) do
{_, ""} -> :number
_ -> :text
end
【讨论】: