Regex 在不移除Elixir中的分隔符的情况下拆分字符串?

Regex 在不移除Elixir中的分隔符的情况下拆分字符串?,regex,string,split,elixir,Regex,String,Split,Elixir,我正在寻找一种在Elixir中拆分字符串的方法,而不删除用于拆分的模式,其行为如下 String.split "testZng", "Z" # ["test", "ng"] String.split "testZng", "Z" # ["test", "Zng"] String.split "testZng", "Z" # ["testZ", "ng"] 我在找这样的东西 String.split "testZng", "Z" # ["test", "ng"] String.split

我正在寻找一种在Elixir中拆分字符串的方法,而不删除用于拆分的模式,其行为如下

String.split "testZng", "Z"
# ["test", "ng"]
String.split "testZng", "Z"
# ["test", "Zng"]
String.split "testZng", "Z"
# ["testZ", "ng"]
我在找这样的东西

String.split "testZng", "Z"
# ["test", "ng"]
String.split "testZng", "Z"
# ["test", "Zng"]
String.split "testZng", "Z"
# ["testZ", "ng"]
还是像这样

String.split "testZng", "Z"
# ["test", "ng"]
String.split "testZng", "Z"
# ["test", "Zng"]
String.split "testZng", "Z"
# ["testZ", "ng"]
您可以使用:

Regex.split~r/(?=Z)/,“testZng”
#[“测试”,“Zng”]
Regex.split~r/(?您可以使用:

Regex.split~r/(?=Z)/,“testZng”
#[“测试”,“Zng”]

Regex.split~r/(?另一种可能的方法:

defmodule StackOverflow do
  def split(string, <<split_char_cp>> = split_char, split_pos \\ :split_after) do
    if String.contains?(string, split_char) do
      index = string |> to_charlist |> Enum.find_index(&(split_char_cp == &1))
      String.split_at(string, if(split_pos == :split_after, do: index + 1, else: index))
    else
      ""
    end
  end
end
# Used like this: 
# import StackOverflow
# split("TestZng","Z")  
# => {"TestZ","ng"}
# split("TestZng","Z",:split_before)
# => {"Test","Zng"}
# split("TestZng","h")
# => ""
defmodule StackOverflow do
def split(string,=split_char,split_pos\\:split_after)do
如果String.contains?(String,split_char)do
index=string |>to_charlist |>Enum.find_index(&(split_char_cp==&1))
String.split_at(String,if(split_pos==:split_after,do:index+1,else:index))
其他的
""
终止
终止
终止
#这样使用:
#导入堆栈溢出
#拆分(“TestZng”、“Z”)
#=>{“TestZ”,“ng”}
#拆分(“TestZng”,“Z”,“之前拆分”)
#=>{“测试”,“Zng”}
#拆分(“TestZng”、“h”)
# => ""

我不确定这是否比RegEx lookarounds更好或更差。我只是为了完整起见提供它。

另一种可能的方法:

defmodule StackOverflow do
  def split(string, <<split_char_cp>> = split_char, split_pos \\ :split_after) do
    if String.contains?(string, split_char) do
      index = string |> to_charlist |> Enum.find_index(&(split_char_cp == &1))
      String.split_at(string, if(split_pos == :split_after, do: index + 1, else: index))
    else
      ""
    end
  end
end
# Used like this: 
# import StackOverflow
# split("TestZng","Z")  
# => {"TestZ","ng"}
# split("TestZng","Z",:split_before)
# => {"Test","Zng"}
# split("TestZng","h")
# => ""
defmodule StackOverflow do
def split(string,=split_char,split_pos\\:split_after)do
如果String.contains?(String,split_char)do
index=string |>to_charlist |>Enum.find_index(&(split_char_cp==&1))
String.split_at(String,if(split_pos==:split_after,do:index+1,else:index))
其他的
""
终止
终止
终止
#这样使用:
#导入堆栈溢出
#拆分(“TestZng”、“Z”)
#=>{“TestZ”,“ng”}
#拆分(“TestZng”,“Z”,“之前拆分”)
#=>{“测试”,“Zng”}
#拆分(“TestZng”、“h”)
# => ""
我不确定这是比RegEx lookarounds更好还是更差。我只是为了完整起见提供它