Regex, чтобы найти 4-е значение внутри скобки - PullRequest
0 голосов
/ 17 мая 2019

Как я могу прочитать 4-е значение (внутри "" i.e "vV0 ....", используя Regex в следующих условиях?

Я немного обновляю эту часть. Можно ли сначала найти слово "LaunchFileUploader", а затем выбрать 4-е значение, если в файле несколько экземпляров LaunchFileUploader, просто выберите 4-е значение первого найденного слова? Прикрепление скриншота файла, где это нужно искать (в файле слово «LaunchFileUploader»)

enter image description here

Я пробовал это, но это дает как - мне нужно 4-е значение (Группа 1 дает мне третье значение)

\bLaunchFileUploader\b(\:?.*?,){3}.*?\)

Match 1
Full match  11030-11428 LaunchFileUploader("ERM-1BLX3D04R10-0001", 1662, "2ecbb644-34fa-4919-9809-a5ff47594c2d", "8dZOPyHKBK...

Group 1.    n/a  "2ecbb644-34fa-4919-9809-a5ff47594c2d",

Я все еще ищу решение для этого. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Это работает для Python и PHP:
(?<=\")(.*)(?:\"\);)\Z
Демонстрация для Python и PHP

Для Java замените \Z на $ следующим образом:
(?:")(.*)(?:\"\);)$
Демонстрация для JavaScript

ПРИМЕЧАНИЕ : Обязательно посмотрите захваченную группу а не подходящая группа .

ОБНОВЛЕНИЕ :
Попробуйте это для своего обновленного запроса:
"(.*)"(?:[\\);\] \/>}]*)$
Демодля обновленной входной строки

все вышеприведенные шаблоны регулярных выражений предполагают, что после каждой запятой есть разрыв строки

Сгенерированный автоматически код Java:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\"(.*)\"(?:[\\\\);\\] \\/>\\}]*)$";
final String string = "\n"
     + "}$(document).ready( function(){ PathUploader\n"
     + "    (\"ERM-1BLX3D04R10-0001\", \n"
     + "    1662, \n"
     + "    \"1bff5c85-7a52-4cc5-86ef-a4ccbf14c5d5\", \n"
     + "\"vV0mX3VadCSPnN8FsAO7%2fysNbP5b3SnaWWHQETFy7ORSoz9QUQUwK7jqvCEr%2f8UnHkNNVLkJedu5l%2bA%2bne%2fD%2b2F5EWVlGox95BYDhl6EEkVAVFmMlRThh1sPzPU5LLylSsR9T7TAODjtaJ2wslruS5nW1A7%2fnLB%2bljZaQhaT9vZLcFkDqLjouf9vu08K9Gmiu6neRVSaISP3cEVAmSz5kxxhV2oiEF9Y0i6Y5%2f5ASaRiW21w3054SmRF0rq3IwZzBvLx0%2fAk1m6B0gs3841b%2fw%3d%3d\"); } );//]]>";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}  
1 голос
/ 17 мая 2019

В зависимости от того, что вам доступно, есть несколько способов сделать это.

В любом случае, это сработало бы лучше, если бы в строке не было новых строк, просто ("value1","value2","value3","value4") и т. Д. Это все равно будет работать, но вам может потребоваться очистить некоторые новые строки из полученной строки.

Простой способ - используйте код для сложной части. Возьмите внутреннюю строку:

(?<=\().*?(?=\))

Это позволит получить все, что находится между двумя скобками (с использованием положительных результатов). В коде вы можете затем разбить / взорвать эту строку на , и взять 4-й элемент.

Если вы хотите сделать все это в регулярном выражении, вы можете использовать что-то вроде:

(?<=\()(?:.*?,){3}(.*?)(?=\))

Это будет а) соответствовать всему содержанию скобок и б) захватить 4-й вариант в группе захвата. Чтобы пойти еще глубже:

(?<=\()(?:.*?,){3}\"(.*?)\"(?=\))

будет содержать только кавычки "".

Некоторые инструменты не позволяют использовать обходные пути, если это так, дайте мне знать, и я посмотрю, какие еще способы существуют вокруг него.

РЕДАКТИРОВАТЬ Запустите это в консоли JS в браузере. Это действительно работает.

console

РЕДАКТИРОВАТЬ 2 Я вижу, вы обновили свой вопрос с текстом, который вы на самом деле ищете. Этот шаблон будет включать в себя пробел и символ новой строки в соответствии с копией / вставкой вышеупомянутого текста .

(?<=\(\")(?:.*?,\s?\n?){3}\"(.*?)\"(?=\))

Смотрите мое второе изображение для теста в консоли

console 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...