令人惊讶的是,正则表达式匹配器无法正确匹配反斜杠。例如
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路径。
答案 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"]