用于替换为分隔符的Java正则表达式:或$

用于替换为分隔符的Java正则表达式:或$,java,regex,Java,Regex,我有一些作业运行以下非标准命名约定,下面有一些作业示例: ========================================= Job Name | New Name ----------------------------- ---------- JOB:/Level0_APP1_12345_0/ JOB JOB:Level1_DBASW_t323dk23_p1 JOB JOB$SAV:

我有一些作业运行以下非标准命名约定,下面有一些作业示例:

=========================================
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

我会在这里使用一个简单的正则表达式:

^(.*?)(?::(?!\\)|\$).*
它:

  • ^
    -字符串的开头
  • (.*)
    -在第一组之前,将尽可能少的符号(新行除外)捕获到组1中。。。
    • (?::(?!\\)\$)
      -后面不跟
      \
      (带
      (?::(?!\\)
      )的
      (带
      \$
      )的
      。)
  • *
    -匹配行的其余部分
见:

试试这个:

^(\w+(?=:\\.+):\\.+|[^:$]+)

第一个捕获组($1)是您正在寻找的

Check@Tushar,您能否将此作为答案发布。首先,我想您可能是一位同事,他有一个类似的奇怪的工作名称惯例。但后来我发现这个问题是您自己提出来的。;-)
JOB
JOB
JOB
backup
QUERY
QUERY
QUERY
FS1:\
PS:\MXMI
^(\w+(?=:\\.+):\\.+|[^:$]+)