最近这里有一个R问题由mrdwab回答,它使用了非常酷的正则表达式(LINK)。我喜欢这个反应,但不能概括它,因为我不明白发生了什么(我被提供的不同数值愚弄了,但这并没有真正产生任何有用的东西)。有人可以一块一块地打破正则表达式并解释发生了什么吗?
x <- c("WorkerId", "pio_1_1", "pio_1_2", "pio_1_3", "pio_1_4", "pio_2_1",
"pio_2_2", "pio_2_3", "pio_2_4")
gsub("([a-z])_([0-9])_([0-9])", "\\1_\\3\\.\\2", x) #Explain me please
提前谢谢。
答案 0 :(得分:11)
如果你有一个字符,两个数字用下划线分隔(例如,a_1_2),正则表达式将选择匹配的字符和数字,并使它们可用作变量。 \\1
,\\2
和\\3
引用原始表达式中匹配的参数:
\\1 <- a
\\2 <- 1
\\3 <- 2
上面运行gsub
的结果是搜索表达式中的匹配项,并按数字的顺序翻转数字的顺序。因此,例如,a_1_2
将成为a_2.1
。
"\\1_\\3\\.\\2"
# a_ 2 . 1