【问题标题】:Select a string ending at the first instance of character in Regular Expressions选择以正则表达式中第一个字符实例结尾的字符串
【发布时间】:2022-10-14 01:06:56
【问题描述】:

假设我有以下字符串:

pos/S881.LMG1810.QE009562.mzML

并希望从该字符串中选择开头:

pos/S881.

我可以使用以下正则表达式来获取字符串的开头 (^),然后是任何字符 (.)、任意次数 (*),以小数点 (\.) 结尾

^.*\.

然而,这在字符串中的最后一个小数处终止,因此给了我:

pos/S881.LMG1810.QE009562.

如何在第一个小数点处终止选择?

【问题讨论】:

    标签: r regex stringr


    【解决方案1】:

    接受@akrun 的快速回复,但发现“?”修饰符使“*”在我所写的原始表达式中变得不贪婪。

    stringr::str_extract("pos/S881.LMG1810.QE009562.mzML", "^.*?\.")
    [1] "pos/S881."
    

    【讨论】:

      【解决方案2】:

      我们可以使用正则表达式环视 ((?<=\.)) 来匹配在 . 之后成功的字符并删除带有 trimws 的字符

      trimws(str1, whitespace = "(?<=\.).*")
      [1] "pos/S881."
      

      或者从字符串的开头 (^) 提取不是. ([^.]+) 的字符,后跟一个点(元字符,因此转义)

      library(stringr)
      str_extract(str1, "^[^.]+\.")
      [1] "pos/S881."
      

      数据

      str1 <- "pos/S881.LMG1810.QE009562.mzML"
      

      【讨论】:

        【解决方案3】:

        我们可以使用strsplit

        使用strsplit 函数和索引,我们提取字符串的所需部分:

        strsplit(x, "\.")[[1]][1]  
        
        [1] "pos/S881"
        

        【讨论】:

          【解决方案4】:

          或者只使用sub()

          s <- 'pos/S881.LMG1810.QE009562.mzML'
          sub("\..*", ".", s)
          # [1] "pos/S881."
          
          • \..* - 匹配一个文字点,后跟 0+ 个字符。

          【讨论】:

            猜你喜欢
            • 2013-03-31
            • 2018-02-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-14
            • 1970-01-01
            • 2013-10-27
            相关资源
            最近更新 更多