Elixir正则表达式匹配文字反斜杠

时间:2020-02-05 15:56:43

标签: regex erlang elixir iex

令人惊讶的是,正则表达式匹配器无法正确匹配反斜杠。例如

df['Rel']=df.G/df.G.mul(df.E.eq('n.e.')).groupby([df['name'],df['#F']]).transform('max')
df
   name  #F     E    G       Rel
0  T.w.   1  n.e.  153  1.000000
1  T.w.   1    60   15  0.098039
2  T.w.   1    99   10  0.065359
3  T.w.   1     S   23  0.150327
4  T.w.   2  n.e.  190  1.000000
5  T.w.   2    60   44  0.231579
6  T.w.   2    99   22  0.115789
7  T.w.   2     S   67  0.352632

我希望比赛能取得积极的结果,但也许我误解了Regex.split(~r{\\}, "C:\foo\bar") ["C:\foo\bar"] Regex.match?(~r/\\/, "C:\foo\bar") false 。让我们测试一下:

\

仍然没有比赛。在这一点上相当混乱。您如何在正则表达式中转义Regex.escape("\\") "\\\\" Regex.split(~r{\\\\}, "C:\foo\bar") ["C:\foo\bar"] Regex.match?(~r/\\\\/, "C:\foo\bar") false 来匹配文字\,如您在我的用例中所见,我想拆分Windows路径。

1 个答案:

答案 0 :(得分:3)

正则表达式很好;您输入的内容与您想像的不一样。字符串内的反斜杠转义

String.split("C:\foo\bar", "")
#⇒ ["", "C", ":", "\f", "o", "o", "\b", "a", "r", ""]

String.length("C:\foo\bar")
#⇒ 8

在此处注意"\f""\b"。该字符串不包含反斜杠,但包含"\f""\b"代码点。

也就是说,您需要将适当的字符串传递给Regex.split/3以产生预期的结果。

Regex.split(~r|\\|, "C:\\foo\\bar")
#⇒ ["C:", "foo", "bar"]