我按照非标准命名约定运行作业,下面是一些作业示例:
=========================================
Job Name | New Name
----------------------------- ----------
JOB:/Level0_APP1_12345_0/ JOB
JOB:Level1_DBASW_t323dk23_p1 JOB
JOB$SAV: JOB
backup:SYNC1 backup
QUERY:logs QUERY
QUERY$maps: QUERY
QUERY: QUERY
FS1:\ FS1:\ -- No change in name
PS:\MXMI PS:\MXMI -- No change in name
========================================
分隔符是(;)或($),以先到者为准。此外,正则表达式不应该在名称中包含(:\),如最后2个示例中所示。
我已经使用了以下内容,但没有成功
Regex:
(:|\$[a-zA-Z\/0-9]+)|(\$[a-zA-Z\/0-9]+)|(:$)
(.*)((\:|\$)([a-zA-Z\/0-9]+|$))
(.*)((\:|\$)(.*|$))
Substitution -> $1
答案 0 :(得分:1)
我会在这里使用一个简单的正则表达式:
^(.*?)(?::(?!\\)|\$).*
^
- 字符串开头(.*?)
- 在第一组之前尽可能少地捕获第1组符号(除了换行符之外)...
(?::(?!\\)|\$)
- :
未跟\
((?::(?!\\)
)或文字$
(\$
)< / LI>
.*
- 匹配行的其余部分 请参阅IDEONE demo:
List<String> strs = Arrays.asList("JOB:/Level0_APP1_12345_0/", "JOB:Level1_DBASW_t323dk23_p1",
"JOB$SAV:", "backup:SYNC1","QUERY:logs","QUERY$maps:","QUERY:","FS1:\\","PS:\\MXMI");
for (String str : strs)
System.out.println(str.replaceAll("^(.*?)(?::(?!\\\\)|\\$).*", "$1"));
输出:
JOB
JOB
JOB
backup
QUERY
QUERY
QUERY
FS1:\
PS:\MXMI
答案 1 :(得分:0)
试试这个:
^(\w+(?=:\\.+):\\.+|[^:$]+)
您正在寻找第一个捕获组($ 1)