[英]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.