RegEx用于检查字符串中是否存在大写字母

时间:2019-05-06 10:46:30

标签: java regex

我试图然后提取并纠正单词中间的大写字母

我想到了这个 regex ,但是它并没有完全满足我的要求,它只是检测部分想要的结果

[A-Z]([a-z][A-Z]?)+|[a-z]([A-Z][a-z]?)+

参见此处:https://www.regexplanet.com/share/index.html?share=yyyyd810vnr

示例

Input:
Il CodiCe della mappa non deVe usCire dalla tomba.

正则表达式应标识: CodiCe,deVe,usCire .. ,以便稍后将其更正为小写。

Input:
E il CodiCe per deCifrare la mappa si troVa a Volubilis, ViCino alle roVine romane in MaroCCo.

正则表达式应标识: CodiCe,deCifrare,troVa,Volubilis,ViCino,roVine,MaroCCo

注意:段开头的单词应排除在外。

3 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式来匹配其中包含至少一个大写字母的任何单词,但在任何情况下都将忽略匹配的第一个单词。

\b(?<!^)(?=[a-z]*[A-Z])[a-zA-Z]+\b

Regex Demo

这是一个Java代码,它将为您提供字符串,其中每个带有大写字母的单词都将使用matcher.appendReplacement转换为小写字母

List<String> sentenceList = Arrays.asList("Il CodiCe della mappa non deVe usCire dalla tomba.",
        "E il CodiCe per deCifrare la mappa si troVa a Volubilis, ViCino alle roVine romane in MaroCCo.");
Pattern p = Pattern.compile("\\b(?<!^)(?=[a-z]*[A-Z])[a-zA-Z]+\\b");

sentenceList.forEach(x -> {
    System.out.println("Input: " + x);
    Matcher m = p.matcher(x);
    StringBuffer sb = new StringBuffer();

    while (m.find()) {
        m.appendReplacement(sb, m.group().toLowerCase());
    }
    m.appendTail(sb);
    System.out.println("Lowercased string: " + sb);
    System.out.println();
    });

打印

Input: Il CodiCe della mappa non deVe usCire dalla tomba.
Lowercased string: Il codice della mappa non deve uscire dalla tomba.

Input: E il CodiCe per deCifrare la mappa si troVa a Volubilis, ViCino alle roVine romane in MaroCCo.
Lowercased string: E il codice per decifrare la mappa si trova a volubilis, vicino alle rovine romane in marocco.

答案 1 :(得分:0)

如何用首字母与其余小写字母替换字符串:

String input = "E il CodiCe per deCifrare la mappa si troVa a Volubilis, ViCino alle roVine romane in MaroCCo.";
String[] parts = input.split(" ");
StringBuilder sb = new StringBuilder();
for (int i=0; i < parts.length; ++i) {
    if (i > 0) sb.append(" ");
    sb.append(parts[i].substring(0, 1)).append(parts[i].substring(1).toLowerCase());
}

System.out.println(sb);

E il Codice per decifrare la mappa si trova a Volubilis, Vicino alle rovine romane in Marocco.

答案 2 :(得分:0)

此正则表达式也可以找到所有这些单词。

\b\w+[A-Z]+\w+\b

https://regex101.com/r/5lyTG3/4