海绵床垫与记忆棉:有关正则表达式的问题,完美的追加50!

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 09:06:56
如果有一个字符串:
DF5Z5F8C6S8F12SD45
匹配:^([A-Z][0-9]{0,2})+$
那要怎样取得第n组的字符呢?

最好用Java来描述
谢谢,完美的追加50分!
这下头痛了,不知要把分给哪位,谢谢你们的回答!

以 ^([A-Z][0-9]{0,2})+$ 匹配 DF5Z5F8C6S8F12SD45 的结果是 DF5Z5F8C6S8F12SD45。
取第n组字符? 你的“字符组”怎么定义?

如果你指的是 D 、F5 、Z5 、F8 、C6 、S8 、F12 、S 、D45 ,把表达式改成 ([A-Z][0-9]{0,2})+? 然后把每一个成功的匹配加入容器里后就可以以号取组了:

import java.util.*;
import java.util.regex.*;

class C {
    public static void main( String[] args ) {

        String   str = "DF5Z5F8C6S8F12SD45",
               regex = "([A-Z][0-9]{0,2})+?";

        Matcher m = Pattern.compile( regex ).matcher( str );

        List groups = new ArrayList( );
        while( m.find( ) )
            groups.add( m.group( ) );

        for( int i = 0; i < groups.size( ); ++i )
            System.out.println( "Group " + i + ": " + groups.get( i ) );
    }
}

*******************************************************

输出:

Group 0: D
Group 1: F5
Group 2: Z5
Group 3: F8
Group 4: C6
Group 5: S8
Group 6: F12
Group 7: S
Group 8: D45

 
 
 
你调用 String 的 split( ) 时以带有 positive lookbehind 的表达式作为参数即可达到目的:

    "DF5Z5F8C6S8F12SD45".split( "(?<=[A-Z]\\d{0,2})" )