我有像:
这样的字符串[POS Purchase]
POS Signature Purchase International SKYPE COMMUNICATIO, LUXEMBOURG, LUX
或:
ATM Cash Withdrawal. Surcharge: -3.0 BNEAIR INT DP LSL4 2, BNE AIRPORT, AUS
我希望得到包含任何字符但小写字母的字符串的结尾。对于上面的两个例子,答案应该是:
SKYPE COMMUNICATIO, LUXEMBOURG, LUX
和
BNEAIR INT DP LSL4 2, BNE AIRPORT, AUS
如何使用正则表达式实现此目的?
答案 0 :(得分:5)
根据您的需要,您正在寻找以下正则表达式:
[^a-z]+$
否定字符类[^a-z]+
将匹配任何无小写字符的组合,而锚$
将使该正则表达式引擎与字符串的结尾匹配。
但请注意,这将与您的第二个示例中的-3.0
匹配。如果您希望获得该值,则可以将[A-Z]
置于正则表达式的前导位置:
[A-Z][^a-z]*$
您可以从这里开始了解有关正则表达式http://www.regular-expressions.info/
的更多信息答案 1 :(得分:3)
您可以使用此正则表达式:
[A-Z][A-Z\d, ]*$
以MULTILINE
模式匹配您的数据。
这将匹配以大写字母开头的文本,后跟大写字母或数字或空格或逗号。
在Java中使用:
Pattern regex = Pattern.compile("(?m)[A-Z][A-Z\\d, ]*$");
答案 2 :(得分:1)
您可以使用以下自包含示例/模式匹配以大写单词字符开头且不包含任何小写字符的最后一个字符串:
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());
}
}
<强>输出强>
SKYPE COMMUNICATIO, LUXEMBOURG, LUX
BNEAIR INT DP LSL4 2, BNE AIRPORT, AUS