空格分隔的字符串java需要正则表达式

时间:2012-11-19 17:08:17

标签: java regex boost-regex regex-greedy regex-lookarounds

我有一个处理许多空格分隔字符串的操作,我正在寻找一个字符串匹配函数的正则表达式,如果前两个字符串在第一个空格以大写字母开头之前触发传递,如果不是则返回false。

示例:

"AL_RIT_121 PA_YT_32 rit cell 22 pulse"

将返回true,因为前两个子字符串AL_RIT_121PA_YT_32分别以大写字母AP开头

"AL_RIT_252 pa_YT_21 mal cell reg 32 1 ri"

将返回false,因为p为小写。

5 个答案:

答案 0 :(得分:5)

Pattern.compile("^\\p{Lu}\\S*\\s+\\p{Lu}")

将使用.find()方法。没有理由在前缀测试中使用matches,但如果你有外部约束,那就去做

Pattern.compile("^\\p{Lu}\\S*\\s+\\p{Lu}.*", Pattern.DOTALL)

要解决这个问题:

  1. ^匹配字符串的开头
  2. \\p{Lu}匹配任何大写字母
  3. \\S*匹配零个或多个非空格字符,包括_
  4. \\s+匹配一个或多个空格字符,
  5. 第二个\\p{Lu}匹配开头第二个单词的大写字母。
  6. 在第二个版本中,.*Pattern.DOTALL相结合,与输入的其余部分相匹配。

答案 1 :(得分:3)

只需string.matches("[A-Z]\\w+ [A-Z].*")

答案 2 :(得分:1)

如果这两个示例演示了您的输入格式,则可以使用特定的正则表达式:

^(?:[A-Z]+_[A-Z]+_\d+\s*)+

这意味着:

^           - Match the beginning of the string
(?:         - Start a non-capturing group (used to repeat the following)
    [A-Z]+  - Match one or more uppercase characters
    _       - Match an underscore
    [A-Z]+  - Match one or more uppercase characters
    _       - Match an underscore
    \d+     - Match one or more decimals (0-9)
    \s*     - Match zero or more space characters
)+          - Repeat the above group one or more times

您可以在Java中使用它:

Pattern pattern = Pattern.compile("^(?:[A-Z]+_[A-Z]+_\\d+\\s*)+");
Matcher matcher = p.matcher( inputString);
if( matcher.matches()) {
    System.out.println( "Match found.");
}

答案 3 :(得分:1)

检查出来:

    public static void main(String[] args) 
{
    String text = "AL_RIT_121 pA_YT_32 rit cell 22 pulse";

    boolean areFirstTwoWordsCapitalized = areFirstTwoWordsCapitalized(text);

    System.out.println("areFirstTwoWordsCapitalized = <" + areFirstTwoWordsCapitalized + ">");

}

private static boolean areFirstTwoWordsCapitalized(String text)
{
    boolean rslt = false;

    String[] words = text.split("\\s");

    int wordIndx = 0;

    boolean frstWordCap = false;
    boolean scndWordCap = false;

    for(String word : words)
    {
        wordIndx++;

        //System.out.println("word = <" + word + ">");

        Pattern ptrn = Pattern.compile("^[A-Z].+");

        Matcher mtchr = ptrn.matcher(word);

        while(mtchr.find())
        {
            String match = mtchr.group();

            //System.out.println("\tMatch = <" + match + ">");

            if(wordIndx == 1)
            {
                frstWordCap = true;
            }
            else if(wordIndx == 2)
            {
                scndWordCap = true;
            }
        }
    }

    rslt = frstWordCap && scndWordCap;

    return rslt;
}

答案 4 :(得分:1)

试试这个:

public class RegularExp 
{

    /**
     * @param args
     */
    public static void main(String[] args) {
        String regex = "[A-Z][^\\s.]*\\s[A-Z].*";
        String str = "APzsnnm lmn Dlld";
        System.out.println(str.matches(regex));

    }

}