我有一个处理许多空格分隔字符串的操作,我正在寻找一个字符串匹配函数的正则表达式,如果前两个字符串在第一个空格以大写字母开头之前触发传递,如果不是则返回false。
示例:
"AL_RIT_121 PA_YT_32 rit cell 22 pulse"
将返回true,因为前两个子字符串AL_RIT_121
和PA_YT_32
分别以大写字母A
和P
开头
"AL_RIT_252 pa_YT_21 mal cell reg 32 1 ri"
将返回false,因为p
为小写。
答案 0 :(得分:5)
Pattern.compile("^\\p{Lu}\\S*\\s+\\p{Lu}")
将使用.find()
方法。没有理由在前缀测试中使用matches
,但如果你有外部约束,那就去做
Pattern.compile("^\\p{Lu}\\S*\\s+\\p{Lu}.*", Pattern.DOTALL)
要解决这个问题:
^
匹配字符串的开头\\p{Lu}
匹配任何大写字母\\S*
匹配零个或多个非空格字符,包括_
\\s+
匹配一个或多个空格字符,\\p{Lu}
匹配开头第二个单词的大写字母。在第二个版本中,.*
与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));
}
}