在RegEx

问题描述

我正在使用正则表达式来查找非常简单的模式。

但是,我想在比赛之间插入一个连字符。

我对编写RegEx匹配模式非常熟悉,但是在如何使用RegEx替换插入字符方面遇到了麻烦。

我的RegEx是:
(\ d {1,2})([A-Z] {1,3})(_)?(\ d {3,4})
匹配:

  • 03EM0109
  • 03EM0112
  • 03EM0151
  • 3V204
  • 02SDV_0900

我希望使用RegEx Replace的输出在匹配项之间输入连字符以给我:

  • 03-EM-0109
  • 03-EM-0112
  • 03-EM-0151
  • 3-V-204
  • 02-SDV-0900

我尝试更改RegEx并为之间的空模式输入编号的捕获组,但是当使用replace函数时,它仅返回连字符。大概是因为null捕获组实际上没有捕获任何东西吗?

使用:
(\ d {1,2})()([A-Z] {1,3})()(_)?()(\ d {3,4})

并替换为 $ 2- $ 4- $ 5-
返回3个连字符---

有人可以帮忙吗......

解决方法

如果您使用RegExp (\d{1,2})([A-Z]{1,3})_?(\d{3,4}),并替换为$1-$2-$3,那么它似乎会产生所需的结果。我删除了下划线周围的捕获组

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...