Java регулярное выражение Как получить 3 разных части текста? - PullRequest
2 голосов
/ 19 апреля 2019

У меня есть очень длинная строка в Java

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

То, чего я хочу достичь, это получить:

Ставка: 200

Имя пользователя: Ne7WoRK

Подпись: 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a03cf334471515f98456

Мне нужно 3 регулярных выражения, которые помогут мне получить отдельные строки значения ставки, имени пользователя и подписи. Я не уверен, как этого добиться. Моя попытка решить это была с помощью следующего регулярного выражения

\ б. * / \ Ь

Однако, это регулярное выражение соответствует целым 3 частям и дает вывод этого

200/23 / Ne7WoRK /

Я не уверен, как создать 3 различных регулярных выражения, где:

  1. Первая будет соответствовать любым цифрам от начала строки до первого символа "/". Стрижка 200
  2. Второй будет соответствовать любому символу от второго символа "/" до третьего символа "/". Даю Ne7WoRK
  3. Третий должен соответствовать всему от третьего "/" до конца строки. Дать длинное число

Ответы [ 4 ]

5 голосов
/ 19 апреля 2019

Вы можете разделить его

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

Результат

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

А затем выполните другую работу, чтобы получить требуемое требование

1 голос
/ 19 апреля 2019

Попробуйте это: (\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
}
0 голосов
/ 19 апреля 2019

Вы можете разделить при совпадении либо косую черту, 1+ цифр и косую черту, либо просто косую черту, используя чередование :

/\d+/|/

Regex demo | Java demo

Например:

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

Результат:

[200, Ne7WoRK, 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e]
0 голосов
/ 19 апреля 2019

Вы можете сгруппировать выражения с помощью () например, у вас будет 3 группировки.

^([\d]*)\/([\d]*)\/([a-zA-Z|0-9]*)
  • Группа 1: цифры
  • Группа 2: цифры
  • Группа 3: альфа и цифры
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...