正则表达式替换-删除不匹配的值

问题描述

首先,道歉;我对RegEx的世界还很陌生。

第二个(仅供参考),我使用的是仅具有RegEx Replace功能的应用程序,因此,我可能会受限于无法/无法实现的目标。

挑战(Challange)

我有一个自由文本字段(标记Description),主要包含“无用”文本。但是,某些记录将包含一个或多个有用的ID,我想提取这些ID。

每个ID均具有相同的三字母前缀(APP),后跟五位数的数字值(例如12911)。

例如,我在Description字段中有以下字符串;

APP00001Was APP00002TEST APP00003Blah blah APP00004 Apple APP11112OrANGE APP

旅程

我已经设法非常粗略地组合了一个与我需要的表达式接近的表达式(尽管实际上我需要相反的表达式);

/!?APP\d{1,5}/g

结果;

enter image description here

挣扎

但是,在替换时,我只能保留不匹配的值;

Was TEST Blah blah  Apple OrANGE APP

终极游戏

我希望输出

APP00001 APP00002 APP00003 APP00004 APP11112

再次道歉,如果这有点像一个“点头”问题;但我们将不胜感激,欢迎所有想法。

非常感谢。

解决方法

您可以使用交替|来捕获从第1组中的单词边界开始的模式,或者匹配1+个单词字符,然后匹配可选的空白字符。

您在第1组中捕获的内容可以用作替换。匹配项将不会替换。

使用!?匹配可选的感叹号。您可以将其放在模式之前,但这不是示例数据的一部分。

\b(APP\d{1,5})\w*|\w+\s*

查看regex demo

在替换使用捕获组1中,大多数使用$1\1

相关问答

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