簡體   English   中英

Java正則表達式以:或$代替定界符

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM