Regex 从第二个管道中剪切的正则表达式

Regex 从第二个管道中剪切的正则表达式,regex,expression,Regex,Expression,使用java正则表达式基本上可以减少分号分隔的属性列表 2013-07-15 21:46:26 |与詹姆斯共进晚餐|卢塞恩| MEDIATYPE;图像|类别;25 | 365 | 423 | IMGTOKEN;8ADBFB5840349CAC014052ED00F26DA |标签;晚餐|詹姆斯|卢塞恩; 我努力实现的目标是: 去掉下一个分号后的所有字符 在分号前剪切单词(在本例中为MEDIATYPE) 切断管道 预期最终结果: 2013-07-15 21:46:26与詹姆斯·卢塞恩共进晚餐

使用java正则表达式基本上可以减少分号分隔的属性列表

2013-07-15 21:46:26 |与詹姆斯共进晚餐|卢塞恩| MEDIATYPE;图像|类别;25 | 365 | 423 | IMGTOKEN;8ADBFB5840349CAC014052ED00F26DA |标签;晚餐|詹姆斯|卢塞恩;
我努力实现的目标是:

  • 去掉下一个分号后的所有字符
  • 在分号前剪切单词(在本例中为
    MEDIATYPE
  • 切断管道
  • 预期最终结果:

    2013-07-15 21:46:26与詹姆斯·卢塞恩共进晚餐
    
    我怎样才能用正则表达式做到这一点


    解决了!谢谢<代码>(.*)(=\\\\[^ |]+)对我来说很好

    所以你想在分号之前在管道上拆分(

    这种模式将起作用:

    \\|(?=[^|]*;)
    
    解释

    • \\\\124;
      文字管道字符。双重转义是Java语法
    • (?=[^ |]*)
      这是一个查找管道后面分号的先行断言。分号前有任意数量的非管道字符
    例如:

    public static void main(final String[] args) throws IOException {
        final String input = "2013-07-15 21:46:26|Dinner with James|Lucerne|MEDIATYPE;image|CATEGORY;25|365|423|IMGTOKEN;8adbfb5840349cac014052ded00f26da|TAGS;dinner|james|lucerne;";
        final String[] split = input.split("\\|(?=[^|]*;)");
        System.out.println(split[0]);
    }
    
    输出:

    2013-07-15 21:46:26|Dinner with James|Lucerne
    

    您可能会在第一个管道上使用替换,匹配后紧跟分号。我建议的原始正则表达式字符串是:

    \|(?=[^|;]*;).*
    
    这是用Java字符串表示的:

    \\|(?=[^|;]*;).*
    
    例如:

    String text = "2013-07-15 21:46:26|Dinner with James|Lucerne|MEDIATYPE;image|CATEGORY;25|365|423|IMGTOKEN;8adbfb5840349cac014052ded00f26da|TAGS;dinner|james|lucerne;";
    String result = text.replaceAll("\\|(?=[^|;]*;).*", "");
    System.out.println("Result: " + result);
    
    这应该给你:

    2013-07-15 21:46:26与詹姆斯·卢塞恩共进晚餐
    
    细分:

    \\\\匹配文字管道
    (?=开始正向前瞻
    [^ |]*除管道或分号以外的任何字符
    ;分号
    )结束正向前瞻
    *这一行还有什么事吗
    
    “正向前瞻”是指确保“切割”开始的管道后面有一个分号,中间没有任何管道或分号。

    使用此模式:

    (.*?)(?=\|[^|;]+;)
    

    欢迎来到堆栈溢出。似乎您需要访问并参考有关如何提出好问题的帮助。