首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QRegExp与某些字母匹配吗?

QRegExp与某些字母匹配吗?
EN

Stack Overflow用户
提问于 2014-07-14 19:00:54
回答 3查看 741关注 0票数 0

我正在研究DNA,RNA和蛋白质序列,而QRegExp不适用于我来检测这个序列是否只包含特定的字符。例如,明确的包含仅包含acgt:

代码语言:javascript
复制
seq.contains(QRegExp("[gatc]"))

对我不起作用。我该怎么纠正呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-16 07:52:51

您正在寻找序列中是否包含以外的字符,而不是 gatc。您也不应该在Qt 5中使用不推荐的QRegExp

代码语言:javascript
复制
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
QRegularExpression invalid("[^gatcGATC]");
#else
QRegExp invalid("[^gatcGATC]");
#endif

if (seq.contains(invalid)) {
  qDebug() << "invalid sequence!";
  ...
}
票数 0
EN

Stack Overflow用户

发布于 2014-07-14 19:19:25

默认情况下,QRegExp区分大小写。

代码语言:javascript
复制
QRegExp ( const QString & pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive

您应该添加该参数,使其不区分大小写。

票数 0
EN

Stack Overflow用户

发布于 2014-07-15 06:45:27

误解了OP请求。这个解决方案是为了找到只包含所有4个元素一次的子序列。

由于正则表达式不能计数出现的次数,因此需要检查是否有任何可能的匹配。简短的例子使用2个字符: AB和BA。AAABBBAAA检查。由于表达式不能搜索置换,所以您需要使用QRegExp(“(AB=BA)”)。因此,寻找每一个元素都有一次的序列,需要对其进行regex检查(ACGT_

更容易实现如下内容:

代码语言:javascript
复制
QString seq = "gactacgtccttacgaccaacggcgataaaaattgcccgcataagacaactttcgaggcg";
QMap<QChar,int> count;

void resetCounter()
{
  count[QChar('a')] = 0;
  count[QChar('c')] = 0;
  count[QChar('g')] = 0;
  count[QChar('t')] = 0;
}

bool checkCounter()
{
  foreach(count.values(), int val)
    if(val != 1)
      return false;
  return true;
}


resetCounter();
for(int i=0; i<seq.length(); i++)
{  
  count[seq.at(i)] = count[seq.at(i)] + 1;
  if(count[seq.at(i)] > 1)
  {
    resetCounter();
    count[seq.at(i)] = 1;
  }
  if(checkCounter())
  {
    //Found sequence
    count[seq.at(i-3)] = 0;
  }
} 

编辑:发现小错误。必须在调用resetCounter()之后将当前元素设置为1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24743820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档