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