java regex - 应用程序名称替换

标签 java regex

我需要帮助从其作业名称中获取相关的应用程序名称。

Job Name                                     | App Name
---------------------------------------------  ----------
JOB:Level1_OSP_DEF_1_1443534637_3mqku88i_1_0   OSP_DEF_1
JOB:Level0_GRSPOL_1423634637_20afoikl_1_1      GRSPOL
JOB:Level1_DSP_113_%I_3qqkv2vk_1_1             DSP_113
JOB:Level0_BPKMG_12_1238534637_2a4foik1_1_0    BPKMG_12

我已经尝试了一些正则表达式,但它并不总是生成正确的结果。

JOB:*.*?_(.*?)_[*\d|%I]+_.*
JOB:*.*?_(.*?)_[t]*\d+?_.*

规则:-

1. The App name can have a max. of 9 characters including "_" in middle.
2. The App name is present after the 1st "_" and always ends with "_".
3. The Alphabets in App Name will always be in CAPS.

最佳答案

假设 App Name 应该是符合 3 条定义规则的最长可能子字符串(未声明规则),并且作为名称它仅限于大写字母(规则 #3)、数字(未声明)规则)和下划线(规则 #1):

private static String getAppName(String jobName) {
    Matcher m = Pattern.compile("^[^_]*_([A-Z0-9_]{1,9})_").matcher(jobName);
    if (m.find())
        return m.group(1);
    return null;
}

请注意,此正则表达式不限制第一个 _ 之前的文本,或 _ 之后终止 App Name 的文本。这完全符合没有任何此类限制的规则。

测试

System.out.println(getAppName("JOB:Level1_OSP_DEF_1_1443534637_3mqku88i_1_0"));
System.out.println(getAppName("JOB:Level0_GRSPOL_1423634637_20afoikl_1_1"));
System.out.println(getAppName("JOB:Level1_DSP_113_%I_3qqkv2vk_1_1"));
System.out.println(getAppName("JOB:Level0_BPKMG_12_1238534637_2a4foik1_1_0"));

输出

OSP_DEF_1
GRSPOL
DSP_113
BPKMG_12

关于java regex - 应用程序名称替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33665774/

相关文章:

java - 横向视频 View

java - 如何以编程方式更改文件的 Eclipse CDT 工具设置?

javascript - String.fromCharCode(e.which) 无法识别点和逗号

python - 无法在 Ubuntu 中安装正则表达式

java - 如何使用 Spring MVC WebContentInterceptor 启用永不过期的浏览器缓存?

java - Android 和缺少函数 getTextGlyphs

java - 来自 JTextArea Java 的 ActionListener

php - Preg_match 字母数字 - _' "和空格

Ruby Regex 仅捕获最后一个匹配组的值

javascript - 是否可以编写一个正则表达式来跳过一个或多个字符并继续匹配