我需要帮助构建一个Java风格的正则表达式,它提取任何类型的大写字母第二次出现后的一切.

例如,对于示例字符串"98A02D1",结果应该是D1.大写字母第二次出现之前出现什么并不重要.

我想出来的是:(?:.*?[A-Z]){2}(.*)

这是不起作用的,并且只从第三次出现时捕获.将数字放在大括号中并不会有什么帮助.感谢任何人的帮助!

推荐答案

您可以从第二个大写字母开始匹配.或者,您可以匹配第二个大写字母之前的任何内容,并将其替换为空白.

以下正则表达式将与应删除的部分匹配:

^[^A-Z]*[A-Z][^A-Z]*

Regex Explanation:

  • ^:字符串的开始
  • [^A-Z]*:非大写字符的任意序列
  • [A-Z]:大写字符
  • [^A-Z]*:非大写字符的任意序列

在您的Java代码中:

String string = "98A02D1";
String pattern = "^[^A-Z]*[A-Z][^A-Z]*";

System.out.println(string.replaceFirst(pattern, ""));

Output:

D1

查看regex演示here.com/r/Brd6X8/1" rel="nofollow noreferrer">here和Java演示here.

Java相关问答推荐

Java中Stream(java.util.stream)和linkedList数据 struct 之间是什么关系?

如何使用CSS为选定但未聚焦的表格行设置背景 colored颜色 ?

如何审查Java dtos中的自定义注释字段?

Android视图覆盖不阻止点击它后面的控件

为什么如果数组列表中有重复项,我的代码SOMETIMES不返回true?

在spring—data中自动发现native—sql查询期间遇到重复的SQL别名[id]

为什么Java的代码工作(if condition内部的实例)

为什么我要创建一个单独的互斥体/锁对象?

在模拟超类中设置非setter属性的值

';com.itextpdf.ext.html.WebColors已弃用

暂停计时器

Java流传输一个列表并创建单个对象

测试容器无法加载类路径初始化脚本

使用存储在字符串变量中的路径目录打开.pdf文件

我如何为我的Java抵押贷款代码执行加薪操作(&Q)

当我在Java中有一个Synchronized块来递增int时,必须声明一个变量Volatile吗?

JXBrowser是否支持加载Chrome扩展?

Java编译器是否进行了持续的折叠优化,以及如何进行判断?

Spring Mapstruct如何获取Lazy初始化实体字段的信息?

Java方法参数:括号中的类型声明?