[英]Java regex for replacement with delimiter as : or $
我的作业按照以下非标准命名约定运行,下面是一些作业示例:
=========================================
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
========================================
分隔符为(;)或($),以先到者为准。 另外,正则表达式不应使用名称为(:\\)的正则表达式,如最后两个示例所示。
我使用了以下内容,但没有成功
Regex:
(:|\$[a-zA-Z\/0-9]+)|(\$[a-zA-Z\/0-9]+)|(:$)
(.*)((\:|\$)([a-zA-Z\/0-9]+|$))
(.*)((\:|\$)(.*|$))
Substitution -> $1
我会在这里使用一个简单的正则表达式:
^(.*?)(?::(?!\\)|\$).*
它符合 :
^
-字符串的开头 (.*?)
-在第一个分组之前,尽可能少地将符号(换行符除外(.*?)
捕获到组1中。
(?::(?!\\\\)|\\$)
或者- :
未后跟\\
(带(?::(?!\\\\)
或文字$
(使用\\$
) .*
-匹配行的其余部分 请参阅IDEONE演示 :
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
尝试这个:
^(\w+(?=:\\.+):\\.+|[^:$]+)
您要寻找的是第一个捕获组($ 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.