可以说,我是一个没写过正而八经的正则表达式的人,是一枚小白,各位能否推荐一本适合入门的有关正则表达式的书,语言不限?最好是R语言,其次是 Python 语言或者别的也可以。首先是适合入门,其次是语言环境。多谢多谢

ps: 这样的求助帖不知道,该分哪类,其它版主有何建议

    Cloud2016
    Mastering Regular Expressions o'reilly Jeffrey E. F. Friedl

    Mastering Python Regular Expressions packt open source Authors Félix López Víctor Romero

    虽然我还没学好,但这两本书解决了我不少疑惑

      Cloud2016 我主要就是看 R 自己的帮助文档 ?regex,十几年来看了大概得有一二百遍吧,这文档并不长,但想背下来也不太容易,有些细节还是得到了用的时候再查一遍,比如中括号内哪些字符是特殊字符。再就是现场测试,多造一些例子自己跑一跑、确认一下表达式是否写得对。具体的操作函数我用的最多的是 grep()gsub()gregexpr()regmatches()

      我很久以前写过一点入门的东西:https://bookdown.org/yihui/r-ninja/text-data.html

        Cloud2016 vim 的教材里关于正则总是大书特书,我年轻时一时兴起系统学过,然而后来用得少,于是系统忘记了。R 里的正则跟 vim 又略有不同。

        这玩意儿就是天书,若非天天用,根本记不住,也没必要记住,用时再查。

        正则的核心哲学,我觉得,是兼容和排他,这跟开发包有共通之处。弄个用得着正则的包,比如 @yihui 的好些包,研读源码,我觉得比读教程要效果好。或者自己开发个需要正则来实现的包,以赛代练,爽极了。

          dapengde 前几天开会期间我还跟 @haozhu233 说我的好些包背后的黑魔法都不能直视,要是你们知道了那些包都是建立在正则表达式的基础上,可能会导致用户大恐慌。例如 knitr/bookdown/blogdown 本质上都是在捣鼓正则表达式。

            yihui 我不恐慌。以前用 vim 时,用错过正则,造成灾难性后果,那也没至于死人。

            正则这把双刃剑太锋利,逻辑上稍有不慎就会自残。它的确太训练逻辑思维能力了。

            对了,推荐给 Cloud2016 一个正则表达式的 cheatsheet,设为墙纸,天天洗脑,十年之后,必有所成:

            <https://resources.rstudio.com/contributed-cheat-sheets/regex-cheatsheet>

              我用正则还比较多,不过并没有找书来看

              正则表达式我觉得更像是肌肉记忆,得靠不断重复练习才能掌握。正则表达式跟markdown类似,核心的东西一样,但在不同的语言里(python,perl,bash,R)里都有细微区别,看书的话真的很难掌握要领。

              基本的东西的话在 https://regexr.com/ 练练手,具体问题可以搜爆栈网

              关键是在平时有意识地用多用它。
              最近我的几个用正则表达式的案例供参考:

              1. 批量删出blogdown帖子里yaml头部中,tags中的日文标签

              2. RNA序列聚类结果,整理成表格

                >Cluster 0
                0       15679nt, >SB1234_Contig35475... at +/99.99%
                1       15436nt, >SB1234_Contig35476... at +/99.62%
                2       15764nt, >Contig18540... *
                3       15438nt, >Contig39392... at +/99.69%
                4       15679nt, >comp263440_c8_seq4... at -/99.99%
                5       15667nt, >comp263440_c8_seq6... at -/99.99%
                >Cluster 1
                0       15684nt, >SB1234_Contig35474... at +/99.98%
                1       15685nt, >Contig11682... *
                2       15684nt, >comp263440_c8_seq3... at -/99.98%
                3       15672nt, >comp263440_c8_seq5... at -/99.97%
              3. 去爆栈网挑战一些regex问题,比如
                https://stackoverflow.com/questions/51395291/subset-a-part-of-a-string-before-a-certain-pattern/51395429#51395429
                https://stackoverflow.com/questions/52640644/r-dplyr-and-string-values-how-to-split-and-get-the-second-element-vapply-sappl/52640894#52640894

                lovebluesky yihui dapengde tctcab 感谢各位的指导
                @lovebluesky 书好厚,我打算先看点薄的,先收藏了,以后看

                yihui 没想到正则表达式这么强,我特意翻了 blogdown 的源码

                dapengde 我明天就把它打印出来贴桌上

                tctcab 同事今天给我介绍了 https://regex101.com/ 感觉也不错,都是神器啊

                各位给的信息量都很足,我要闭关学学了

                  Cloud2016 真的,就跟@yihui 大佬说的一样,估计不少用户对用regex感到恐慌。不过也可以理解,毕竟这东西容易出错。可很多情况下你要去写比较复杂的字符处理,尤其是那种几个语言之间交流的,不用正则表达式能用啥。。😂

                  上周看了Miles在rstudio conf的演讲,里面说的就很好,“让用户感觉像魔法的包并不一定需要特别干净(原文smell good,翻不准)“。总之别因为这东西看着像黑魔法就不去用呀

                  r里面正则的套路还是很多的,gsub等是一套, gsub等把perl=T打开又是一套,stringr的那些用起来有时候也有微妙的区别,所以还是在regexr和R里要多试试,真是不出来就去爆栈上问吧 哈哈哈

                  还有这个addin,看着不错,你可以试试
                  https://github.com/gadenbuie/regexplain

                    Cloud2016 更改标题为「【已解决】求推荐一本关于正则表达式的书籍
                    7 天 后

                    鬼知道一两个月后还知道自己写了啥

                    4 年 后