我需要帮助从其作业名称中获取相关的应用程序名称。
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/