正则表达式的部分匹配问题 本帖最后由 casularm 于 2010-06-14 16:00:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String[] str = {"BAAD","BACGTDA","DDDDD","AAAAAA","CCCCC"};//测试字符串 for(int i=0;i<str.length;i++) { Pattern p = Pattern.compile("[ACGTGTC&&["+str[i]+"]]"); //匹配正则 int len = str[i].length()-p.matcher(str[i]).replaceAll("").length();//判断长度 if(len >=5) { System.out.println( str[i] +"符合");//输出 }else { System.out.println( str[i] +"不符合");//输出 } }结果BAAD不符合BACGTDA符合DDDDD不符合AAAAAA符合CCCCC符合 To fengyun817:感谢您的帮助!可能是我没说清楚,与pattern的7个字符必须在同样位置出现相同字符才能算一个匹配,不是7个里面任意匹配5个都算。 没想到好的方法,不用正则表达式行吗?(以下代码均7位数据测试,未考虑长度不够的问题) String[] str = {"BAADAAA","BACGTDA","TCGAGTC","AAAAAAB","ACTTATC"};//测试字符串 String pattern = "ACGTGTC"; for(int i=0;i<str.length;i++) { int count = 0; for(int j = 0;j<str[i].length();j++) { if(pattern.charAt(j)==str[i].charAt(j)) { count ++; } } if(count>=5) { System.out.println( str[i] +"符合");//输出 }else { System.out.println( str[i] +"不符合");//输出 } } Pattern p = Pattern.compile("(A)?\\w??(C)?\\w??(G)?\\w??(T)?\\w??(G)?\\w??(T)?\\w??(C)?\\w??");String str ="BCGFGTC";Matcher mt = p.matcher(str);int counter =0;if(mt.matches()){ int count=mt.groupCount(); for(int i=1;i<=count;i++){ System.out.println(i+"\t"+mt.group(i)); counter=mt.group(i)!=null?(++counter):counter; } System.out.println(counter); //counter为出现次数 >=5时满足 } 看来是不太好解决,Headsen的方法是可以,但是计算量比之前还要大。因为需要匹配的字符串很长,一般有3000多个字符,本来指望能够像matcher.find()之后用matcher.start()直接找到匹配位置的,看来也只能用土办法了。 用正则表达式能做出来 但今天我用的别人的电脑 开发工具 帮助手册都没有 我先关注 明天给你答案如果要匹配的字符是 abcde正则表达式大概是 \a\\s*\b\\s*\c\\s*\d\\s*\e\\s* socket 流的写操作阻塞的问题 讨论:interface能继承concrete class么?请大家发表一下看法。 请问有懂JXTA的不??我有一个问题想请教一下~ JTable多行表头的打印预览及打印 [初级问题] 关于具体的JAVA学习方向。 JAVA开发的程序可以在DOS622下运行吗 刚安装完最新的SDK,不会用~~~ 我在写一个socket类的时候遇到一个问题,帮忙看看!! 昨天的问题, 98 怎么配 java, 可行的话连昨天100分一起给 String和StringBuffer的具体区别是什么? 怎么发布java程序给其他人用 dom4j问题
String[] str = {"BAAD","BACGTDA","DDDDD","AAAAAA","CCCCC"};//测试字符串
for(int i=0;i<str.length;i++)
{
Pattern p = Pattern.compile("[ACGTGTC&&["+str[i]+"]]"); //匹配正则
int len = str[i].length()-p.matcher(str[i]).replaceAll("").length();//判断长度
if(len >=5)
{
System.out.println( str[i] +"符合");//输出
}else
{
System.out.println( str[i] +"不符合");//输出
}
}
结果
BAAD不符合
BACGTDA符合
DDDDD不符合
AAAAAA符合
CCCCC符合
没想到好的方法,
不用正则表达式行吗?(以下代码均7位数据测试,未考虑长度不够的问题) String[] str = {"BAADAAA","BACGTDA","TCGAGTC","AAAAAAB","ACTTATC"};//测试字符串
String pattern = "ACGTGTC";
for(int i=0;i<str.length;i++)
{
int count = 0;
for(int j = 0;j<str[i].length();j++)
{
if(pattern.charAt(j)==str[i].charAt(j))
{
count ++;
}
}
if(count>=5)
{
System.out.println( str[i] +"符合");//输出
}else
{
System.out.println( str[i] +"不符合");//输出
}
}
Pattern p = Pattern.compile("(A)?\\w??(C)?\\w??(G)?\\w??(T)?\\w??(G)?\\w??(T)?\\w??(C)?\\w??");
String str ="BCGFGTC";
Matcher mt = p.matcher(str);
int counter =0;
if(mt.matches()){
int count=mt.groupCount();
for(int i=1;i<=count;i++){
System.out.println(i+"\t"+mt.group(i));
counter=mt.group(i)!=null?(++counter):counter;
}
System.out.println(counter); //counter为出现次数 >=5时满足
}
正则表达式大概是 \a\\s*\b\\s*\c\\s*\d\\s*\e\\s*