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

时间:2019-04-19 10:47:06

标签: java regex regular-language

我在Java中有一个很长的字符串

  

200/23 / Ne7WoRK / 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18> a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a> 03cf334295615f981c47

我想要获得的是:

  

出价:200

     

用户名:Ne7WoRK

     

签名:3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a03cf334295615f981c47e

我需要3个正则表达式,这些表达式可以帮助我获取出价值,用户名和签名的单独字符串。我不确定如何实现这一目标。我试图通过以下正则表达式来解决这个问题

  

\ b。* / \ b

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

  

200/23 / Ne7WoRK /

我不确定如何在以下位置创建3个不同的正则表达式:

  1. 第一个数字将匹配从字符串开头到第一个“ /”符号的任何数字。输入200个字符串
  2. 第二个字符将匹配从第二个“ /”符号到第三个“ /”符号的任何字符。提供Ne7WoRK
  3. 第三个应该匹配从第三个“ /”到字符串末尾的所有内容。提供大量-3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a03cf334295615f981c47e

4 个答案:

答案 0 :(得分:5)

您可以拆分

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

结果

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

然后做一些其他工作来获得想要的需求

答案 1 :(得分:1)

尝试以下操作:(\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
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以使用alternation来匹配正斜杠,1 +位数字和正斜杠,或者仅匹配正斜杠:

FileStorage

Regex demo | Java demo

例如:

/\d+/|/

结果:

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