Java正则表达式。如何获得文本的3个不同部分?

Java正则表达式。如何获得文本的3个不同部分?,java,regex,regular-language,Java,Regex,Regular Language,我有一个很长的java字符串 200/23/Ne7WoRK/3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>A9DC6075D02F7B4F942C4AA02205877350E7DB1F4380A36EBB441906833563D32A62C4A>03cf334295615f981c47e 我想要实现的是: 出价:200 用户名:Ne7WoRK 签字:3045022100D62568E28CB58B4A5308750E43E4690C4

我有一个很长的java字符串

200/23/Ne7WoRK/3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>A9DC6075D02F7B4F942C4AA02205877350E7DB1F4380A36EBB441906833563D32A62C4A>03cf334295615f981c47e

我想要实现的是:

出价:200

用户名:Ne7WoRK

签字:3045022100D62568E28CB58B4A5308750E43E4690C4538DDC18A9DC6075D02F7B4F942C4AA0220587350E7DB1F4380A36EBB4419033563D32A62C4A03CF334295615F981C47E

我需要3个正则表达式,这将帮助我获得出价值,用户名和签名的单独字符串。我不知道如何实现这一目标。我试图用下面的正则表达式来解决这个问题

\b、 */\b

但是,此正则表达式匹配整个3个子部分,并给出此子部分的输出

200/23/NE7工作/

我不知道如何创建3个不同的正则表达式,其中:

  • 第一个将匹配从字符串开头到第一个“/”符号的任何数字。给出200的字符串
  • 第二个将匹配从第二个“/”符号到第三个“/”符号的任何字符。给NE7工作
  • 第三个应该匹配从第三个“/”到字符串末尾的所有内容。给出了长编号-3045022100D62568E28CB58B4A5308750E43E4690C4538DDC18A9DC6075D02F7B4F942C4AA0220587350E7DB1F4380A36EBB441906833563D32A62C4A03CF334295615F981C47E
  • 试试这个:
    (\d+)\/(?:.+)\/(.+)\/(.+)\/(.+)

    它将为您提供包含3个字符串的3个组

    这方面的Java代码是:

    Matcher matcher = Pattern.compile("(\d+)\/(?:.+)\/(.+)\/(.+)").matcher(yourString);
    if (matcher.find()) {
        String bid = matcher.group(1);
        String username = matcher.group(2);
        String signature = matcher.group(3);
    } else {
        // Malformed String
    }
    
    你可以把它分开

    String a = "200/23/Ne7WoRK/3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e";
    System.out.println(Arrays.toString(a.split("/")));
    
    结果

    [200, 23, Ne7WoRK, 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e]
    

    然后做一些其他工作以获得所需的需求

    您可以使用() 例如,您将有3个分组

    ^([\d]*)\/([\d]*)\/([a-zA-Z|0-9]*)
    
    • 第1组:数字
    • 第2组:数字
    • 第3组:字母和数字

    您可以在匹配正斜杠、1+位数和正斜杠或仅匹配正斜杠时进行拆分:

    |

    例如:

    String regex = "/\\d+/|/";
    String string = "200/23/Ne7WoRK/3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e";
    System.out.println(Arrays.toString(string.split(regex)));
    
    结果:

    [200, Ne7WoRK, 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e]
    

    当你还不知道正则表达式是否是这项工作的最佳工具时,你不应该问关于正则表达式的问题。在本例中,它们不是,因为简单的
    String.split
    就足够了。您应该使用
    matcher.match()
    而不是
    matcher.find()
    ,以捕获更多无效字符串。
    [200, Ne7WoRK, 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e]