java - 使用 RegEx 在最后一个点之后查找字符串并删除以大写字母开头的最后一个单词

标签 java regex

String myString = "abc.kiransinh.bapu.abc.events.KiranSinhBorasibBapu";
    Pattern regex = Pattern.compile("[^.]+(?=[^.]*$)[^Bapu]");
    System.out.println(myString);

    Matcher regexMatcher = regex.matcher(myString);

    if (regexMatcher.find()) {
        String ResultString = regexMatcher.group();
        ResultString=ResultString.replaceAll("(.)(\\p{Lu})", "$1_$2").toUpperCase();
        System.out.println(ResultString);
    }

期望输出为:KIRAN_SINH_BORASIAB

我试过上面的代码。只想使用正则表达式。 尽管我使用了 replaceAll 方法。

仅使用 Regex 可能会获得所需的输出。 我是正则表达式的新手。非常感谢任何帮助。 提前致谢:-)

最佳答案

你可以使用这个正则表达式来匹配你想要的字符串:

String re = "(?<=\\.)(?=[^.]*$)\\p{Lu}\\p{L}*?(?=\\p{Lu}(?=[^\\p{Lu}]*$))";
Pattern pattern = Pattern.compile(re);

RegEx Demo

使用 Matcher#find 获取匹配的文本。

Matcher regexMatcher = pattern.matcher( input );

if (regexMatcher.find()) {
   System.out.println( regexMatcher.group() );
}

正则表达式分解:

(?<=\.)                   # lookbehind to assert preceding char is DOT
(?=[^.]*$)                # lookahead to assert there is no further DOT in text
\p{Lu}                    # match a unicode uppercase letter
\p{L}*?                   # match 0 or more of unicode letters (non-greedy)
(?=\p{Lu}(?=[^\p{Lu}]*$)) # make sure next char is uppercase letter and further
                          # (?=[^\p{Lu}]*$) makes sure there is no uppercase letter after

关于java - 使用 RegEx 在最后一个点之后查找字符串并删除以大写字母开头的最后一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350388/

相关文章:

java - 如何用Java为 Crystal 报表创建自定义参数提示对话框?

java - 返回键关闭任务中注册的所有 Activity

Java:将字符串拆分为单独的字符串和整数变量

javascript - 如何批量删除字符串中所有不需要的字符?

java - 一个字符串上有数百个正则表达式

java - 运行maven编译两次

java - Java 中的广度优先搜索

php - 用逗号分割字符串而忽略其他逗号(未引用)

javascript - "Learning JavaScript"第 17 章 : Regular Expressions. ..反向引用示例失败

Javascript 使用正则表达式和对象属性在嵌套对象中查找嵌套对象