Java 在并没有小写字母的字符串末尾获取子字符串

Java 在并没有小写字母的字符串末尾获取子字符串,java,regex,pattern-matching,substring,Java,Regex,Pattern Matching,Substring,我有这样的字符串: [POS Purchase] POS Signature Purchase International SKYPE COMMUNICATIO, LUXEMBOURG, LUX 或: 我想得到字符串的结尾,除了小写字母外,其他字符都可以。对于上述两个例子,答案应该是: SKYPE COMMUNICATIO, LUXEMBOURG, LUX 及 如何使用正则表达式实现这一点?根据您的需要,您需要以下正则表达式: [^a-z]+$ 被求反的字符类[^a-z]+将匹配非小写字

我有这样的字符串:

[POS Purchase]
POS Signature Purchase International  SKYPE COMMUNICATIO, LUXEMBOURG, LUX
或:

我想得到字符串的结尾,除了小写字母外,其他字符都可以。对于上述两个例子,答案应该是:

SKYPE COMMUNICATIO, LUXEMBOURG, LUX


如何使用正则表达式实现这一点?

根据您的需要,您需要以下正则表达式:

[^a-z]+$
被求反的字符类[^a-z]+将匹配非小写字符的任何组合,并且锚点$将使正则表达式引擎匹配字符串的结尾

但请注意,在第二个示例中,这将与-3.0匹配。如果您想了解这一点,可以将[A-Z]放在正则表达式的前导:

[A-Z][^a-z]*$

您可以从这里开始了解有关regex的更多信息

根据您的需要,以下regex是您需要的:

[^a-z]+$
被求反的字符类[^a-z]+将匹配非小写字符的任何组合,并且锚点$将使正则表达式引擎匹配字符串的结尾

但请注意,在第二个示例中,这将与-3.0匹配。如果您想了解这一点,可以将[A-Z]放在正则表达式的前导:

[A-Z][^a-z]*$

您可以从这里开始了解有关正则表达式的更多信息

您可以使用此正则表达式:

[A-Z][A-Z\d, ]*$
以多行模式匹配数据

这将匹配以大写字母开头,后跟大写字母、数字、空格或逗号的文本

在Java使用中:

Pattern regex = Pattern.compile("(?m)[A-Z][A-Z\\d, ]*$");

您可以使用此正则表达式:

[A-Z][A-Z\d, ]*$
以多行模式匹配数据

这将匹配以大写字母开头,后跟大写字母、数字、空格或逗号的文本

在Java使用中:

Pattern regex = Pattern.compile("(?m)[A-Z][A-Z\\d, ]*$");

您可以使用以下自包含的示例/模式来匹配最后一个字符串,该字符串以大写字符开头,不包含任何小写字符:

String[] input = {
    "[POS Purchase]" + 
    System.getProperty("line.separator") + 
    "POS Signature Purchase International  SKYPE COMMUNICATIO, LUXEMBOURG, LUX",

    "ATM Cash Withdrawal. Surcharge: -3.0  BNEAIR INT DP LSL4 2, BNE AIRPORT, AUS"
};
//                            | starts with uppercase letter
//                            |      | uppercase letters or no letters
//                            |      |           | 0 or more times
//                            |      |           | | end of input
//                            |      |           | | 
Pattern p = Pattern.compile("\\p{Lu}[\\p{Lu}\\P{L}]*$");
for (String s: input) {
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.println(m.group());
    }
}
输出


您可以使用以下自包含的示例/模式来匹配最后一个字符串,该字符串以大写字符开头,不包含任何小写字符:

String[] input = {
    "[POS Purchase]" + 
    System.getProperty("line.separator") + 
    "POS Signature Purchase International  SKYPE COMMUNICATIO, LUXEMBOURG, LUX",

    "ATM Cash Withdrawal. Surcharge: -3.0  BNEAIR INT DP LSL4 2, BNE AIRPORT, AUS"
};
//                            | starts with uppercase letter
//                            |      | uppercase letters or no letters
//                            |      |           | 0 or more times
//                            |      |           | | end of input
//                            |      |           | | 
Pattern p = Pattern.compile("\\p{Lu}[\\p{Lu}\\P{L}]*$");
for (String s: input) {
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.println(m.group());
    }
}
输出


您的要求与您的示例不太匹配:除小写字母外的任何字符都包括空格、标点符号、数字等。这与您的示例所显示的不完全相同,例如,如果您的确切要求是这样的,则第二个示例的开头应为:-3.0。是的。我真正想要的只是以大写字母开头的部分。你的要求与你的示例不太匹配:除了小写字母以外的任何字符都包括空格、标点符号、数字等。这与你的示例所显示的不太一样,例如,如果这是你的确切要求,第二个示例的开头应该是:-3.0。是的。我真正想要的只是以大写字母开头的部分。这不是完全正确的,因为他只是想排除小写,我们不知道它是否可以包括其他符号,比如:或者-不知道要求,你永远不能保证说不完全正确。让OP拿出更多的例子或更好的要求,然后如果需要,我可以很容易地调整答案。这不是完全正确的,因为他只是想排除小写,我们不知道它是否包括其他符号,如:或-如果不知道要求,你永远不能保证说不完全正确。让OP拿出更多的例子或更好的要求,然后我可以很容易地调整答案,如果需要的话。