正则表达式在括号内找到第四个值

时间:2019-05-16 23:14:20

标签: regex

在以下情况下,我如何使用Regex读取第四个值(在“”内部,即“ vV0 ....”?)?

我将对此部分进行更新-是否可以先找到单词“ 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 个答案:

答案 0 :(得分:1)

根据可用的功能,有两种方法可以实现。

无论哪种方式,如果字符串中没有新行,仅是简单的("value1","value2","value3","value4")等,这样做会更好。它仍然可以工作,但是您可能需要从结果字符串中清除一些新行。

最简单的方法-在最困难的部分使用代码。抓取内部字符串:

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

这将获得介于两个括号之间的所有内容(使用正视)。在代码中,您可以在,上拆分/分解此字符串,并获取第4个项目。

如果您想在正则表达式中完成所有操作,则可以使用以下方式:

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

这将a)匹配括号的全部内容,并且b)捕获捕获组中的第四个选项。要更深入:

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

仅捕获""引号的内容。

有些工具不允许您使用环视,如果是这种情况,请告诉我,我会看看周围还有哪些其他方式。

编辑在浏览器的JS控制台中运行它。绝对可以。

console

编辑2 我看到您已使用实际搜索的文本更新了问题。按照上面的复制/粘贴操作,此模式将包含空格和换行符文字。

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

在控制台中查看我的第二张图片

console 2

答案 1 :(得分:1)

这适用于python和PHP:
(?<=\")(.*)(?:\"\);)\Z
Demo for Python and PHP

对于Java,将\Z替换为$,如下所示:
(?:")(.*)(?:\"\);)$
Demo for JavaScript

注意:请务必查看 捕获的组 ,而不是匹配的组

更新
尝试此更新请求:
"(.*)"(?:[\\);\] \/>}]*)$
Demo for updated input string

所有上述正则表达式模式都假定每个逗号后都有换行符

自动生成的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));
    }
}