假设我有一个包含“ATGTTTGGATTAGGTAATGAAT”的字符串。
我想在字符串中搜索“TAG”,“TAA”或“TGA”的第一个实例。
为此,我想使用正则表达式。我认为std::regex_search
会起作用,但我不确定如何编写语法。
非常感谢任何帮助。
编辑:我需要检索“TAG”,“TAA”或“TGA”的第一个实例的位置(以先到者为准)。
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
我不知道c ++中的特定调用(也许这就是你要问的内容),但这是你的正则表达式:
/T(A[GA]|GA)/
也就是说,找到一个“T”后跟(“A”和[“G”或“A”])或后跟“GA”。
答案 3 :(得分: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'