r - 如何创建正则表达式以获取 2 个管道之间的子字符串

标签 r string bioinformatics rna-seq

我有一个数据集,我正在尝试使用它来获取两个竖线分隔符之间的文本。文本的长度是可变的,所以我不能使用长度来获取它。这是字符串:

ENST00000000233.10|ENSG00000004059.11|OTTHUMG000

我想获取第一个和第二个管道之间的文本,即 ENSG00000004059.11。我尝试了几种不同的正则表达式,但我无法真正找出正确的语法。正确的正则表达式应该是什么?

最佳答案

这是一个正则表达式。

x <- "ENST00000000233.10|ENSG00000004059.11|OTTHUMG000"
sub("^[^\\|]*\\|([^\\|]+)\\|.*$", "\\1", x)
#> [1] "ENSG00000004059.11"

reprex package 创建于 2022-05-03 (v2.0.1)

解释:

  • ^ 字符串开头;
  • [^\\|]* 不是竖线字符零次或多次;
  • \\| 管道字符需要转义,因为它是一个元字符;
  • ^[^\\|]*\\| 上面的 3 个组合意味着匹配除字符串开头的管道字符以外的任何内容零次或多次,直到找到管道字符;
  • ([^\\|]+) 组匹配除竖线字符以外的任何字符至少一次;
  • \\|.*$ 第二个管道加上任何内容,直到字符串结尾。

然后用它自己替换第一个(也是唯一一个)组,“\\1”,从而删除所有其他内容。

关于r - 如何创建正则表达式以获取 2 个管道之间的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72094440/

相关文章:

java - 如何检查 ArrayList<String> 中的项目是否不包含某个单词?

sql - 删除字符串的最后一部分 SQL

python - 使用 Biopython 的 PDBIO 创建 PDB 文件时出现类型错误,仅限某些文件

python - AttributeError : 'str' object has no attribute 'id' using BioPython, 解析fasta

python - 在 python 中过滤 CSV 文件

RCurl:当站点使用没有 WWW-Authenticate 的 HTTP 401 代码响应时的 HTTP 身份验证

r - dplyr:是否可以使用一个函数在汇总中返回两列?

java - 如何获取 anchor 标记内的部分 href

r - 对名称以模式开头的所有列求和的最有效方法是什么?

r - R 中的神经网络包