【问题标题】:Explain this R regex解释这个 R 正则表达式
【发布时间】:2012-04-15 16:37:15
【问题描述】:

最近,mrdwab 回答了一个 R 问题,该问题使用了一个非常酷的正则表达式 (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

提前谢谢你。

【问题讨论】:

    标签: regex r


    【解决方案1】:

    只要有一个字符和两个用下划线分隔的数字(例如 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
    

    【讨论】:

    • 第一部分非常有用,因为它正在寻找一个字符_#_#。现在你能补充一下你对\\1_\\3\\.\\2的解释吗?
    • @TylerRinker 那是重新排序的部分,它们被称为“反向引用”。第一个括号的内容(这里([a-z])存储在\1,第二个的内容存储在\2,第三个...在\3
    • 感谢@Stema!我还更新了答案以尝试澄清。值得一提的另一件事是. 上的转义:在(大多数)正则表达式语言中,. 将匹配任何内容。转义它会让它呈现为..well..just一个点。
    • 很好的解释。我有。非常感谢。
    • 目前还没有人特别提到它,但每件作品的括号是允许反向引用的。 (.)([A-z]) 允许 \1 和 \2。如果整个正则表达式 ((.)([A-z])) 周围还有另一个集合,那么您还将有第三个 \1 = (.) \2 = ([A-z]) \3 = ((.)([ A-z])) 希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 2010-09-27
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多