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拿出更多的例子或更好的要求,然后我可以很容易地调整答案,如果需要的话。