2

假设我有一个包含“ATGTTTGGATTAGGTAATGAAT”的字符串。

我想在字符串中搜索“TAG”、“TAA”或“TGA”的第一个实例。

为此,我想使用正则表达式。我认为std::regex_search会起作用,但我不确定如何编写语法。

任何帮助将不胜感激。

编辑:我需要检索“TAG”、“TAA”或“TGA”的第一个实例的位置(以先到者为准)。

4

4 回答 4

3

你可以试试这个:

#include <iostream>
#include <regex>

int main() {
    std::string s("ATGTTTGGATTAGGTAATGAAT");
    std::regex r("TAG|TAA|TGA");
    std::sregex_iterator first(s.begin(), s.end(), r);
    std::cout << "position: " << first->position() << std::endl; // position: 10
    return 0;
}

文档在这里:http ://en.cppreference.com/w/cpp/regex

于 2013-11-14T02:52:16.957 回答
0

你可以这样做:

#include <iostream>
using namespace std;
int main()
{
    string str="ATGTTTGGATTAGGTAATGAAT";
    string regstr="TAG";
    const char *show;

    show=strstr(str.c_str(), regstr.c_str());//return the pointer of the first place reg 'TAG',else return NULL。
    cout<<show<<endl;
    return 0;
}
于 2013-11-14T01:52:52.687 回答
0

我不知道 c++ 中的具体调用(也许这就是你要问的),但这是你的正则表达式:

/T(A[GA]|GA)/

也就是说,找到一个“T”后跟(一个“A”和一个[“G”或“A”])或后跟“GA”。

于 2013-11-14T01:55:29.350 回答
0

对于这个特定问题(即假设“TAG”、“TAA”和“TGA”是要搜索的字符串,而不仅仅是更一般问题的代表),简单的搜索会更容易:

find 'T'
  if the next character is 'A' and the character after that is 'A' or 'G', matched;
  else if the next character is 'G' and the character after that is 'A' matched;
  else go back and try the next 'T'
于 2013-11-14T14:20:00.637 回答