如何使用正则表达式返回字符串的部分内容

时间:2018-04-25 08:46:54

标签: r regex

我的格式有多个字符串:

"s mus_musculus.1          3003214       6673 +  195471971 ctctcctatggcggggaaggtgcctggatgtctaaagc-----------------ctgaa-atggggatctatcccagaagctgtgtagcttctgcctgtcccagaagctgtgttgtttct"

如何使用正则表达式来拉出第一个数字序列(即3003214),然后是#34; c,t,a,g和-"的最终序列?

我已经尝试了各种正则表达式构建器,但还是无法弄明白。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此代码:

text <- "s mus_musculus.1          3003214       6673 +  195471971 ctctcctatggcggggaaggtgcctggatgtctaaagc-----------------ctgaa-atggggatctatcccagaagctgtgtagcttctgcctgtcccagaagctgtgttgtttct"

number <- str_extract(text, "(?<=\\s)\\d+(?=\\s)")
string <- str_extract(text, "[\\w\\-]+(?=\\s*)$")

print(number)
print(string)

<强> As demonstrated on rextester.com

说明 -

用于提取数字:

(?<=\\s)是一个积极的后视,告诉正则表达式无论数字是什么,它都应该以空格开头。这完全基于我的假设,即你想要的第一个数字是跟随并且前面有一个空格 \\d+是您要捕获的一个或多个数字系列 (?=\\s)是一个积极的预测,它告诉正则表达式,该数字后跟一个空格。

用于提取字符串:

[\\w\\-]+表示一个或多个单词字符或短划线(成为捕获的字符串)
$断言字符串末尾的位置。所以,无论应该匹配什么,都必须在最后。

答案 1 :(得分:-1)

试试这个

S <- "s mus_musculus.1          3003214       6673 +  195471971 ctctcctatggcggggaaggtgcctggatgtctaaagc-----------------ctgaa-atggggatctatcccagaagctgtgtagcttctgcctgtcccagaagctgtgttgtttct"

gsub(".*\\s(\\d+)\\s{2}.*\\s(\\D+)$", "\\1 \\2", S)
# "3003214 ctctcctatggcggggaaggtgcctggatgtctaaagc-----------------ctgaa-atggggatctatcccagaagctgtgtagcttctgcctgtcccagaagctgtgttgtttct"
  • 。* - 匹配任何内容
  • \\ s - whitespace
  • \\ s {2} - 2个空格
  • (...) - 捕获组
  • \\ d + - 任意数量的连续数字
  • \\ D + - 任意数量的连续字符
  • $ - 字符串结尾
  • \\ 1 - print capture group 1
  • \\ 2 - print capture group 2