繁体   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