gpt4 book ai didi

组内的 Java 正则表达式组

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:01 24 4
gpt4 key购买 nike

我已经在正则表达式上苦苦挣扎了一个小时了。因此,下面是我要解析的文本。

AddAgenda("Gangster's agenda", 
{
TEAM_HITMAN,
TEAM_POLICE
},
{
TEAM_GANG,
TEAM_MAFIA,
TEAM_GANGSTER
})

我想从每对大括号中捕获议程名称,每个团队单独。需要知道的一件事是,我不知道这些对中的每一对有多少个团队。

基本上,我想要这个:

Group [1]:
Gangster's agenda
Group [2]:
Group [0]: TEAM_HITMAN
Group [1]: TEAM_POLICE
Group [3]:
Group [0]: TEAM_GANG
Group [1]: TEAM_MAFIA
Group [2]: TEAM_GANGSTER

但我只想到了这个:

AddAgenda\(\"([^"]+)\",\s*\{(\s*([\w_]+,))*

这会产生这个:

Group [0]:
[0]: AddAgenda("Gangster's agenda",
{
TEAM_MOB,
TEAM_POLICE,
Group [1]:
[0]: Gangster's agenda
Group [2]:
[0]:
TEAM_POLICE,
Group [3]:
[0]: TEAM_POLICE,

最佳答案

This my try :

AddAgenda\(\"([^"]+)\",\s*\{(\s*([\w_]+)\s*,?\s*([\w_]+)\s*)},\s*{\s*(([\w_]+)\s*,?\s*([\w_]+)?\s*,?\s*([\w_]+)?)\s*}\s*\)

因此,看看您的问题,第 3,4 组包含在第 2 组中,第 6,7,8 组(TEAM_GANG、TEAM_MAFIA、TEAM_GANGSTER)包含在第 5 组中。

我们仅使用一个正则表达式的问题是您无法为每个团队自动生成新的捕获组。需要明确的是,正则表达式的一个功能是您可以将量词应用于模式。\d+ 占用更多数字。例如,正则表达式 (\d) 将数字捕获到组 1 中。

那么如果将两者放在这个正则表达式中会发生什么?

(\d)+

您在模式中看到的捕获括号仅捕获单个组。因此,在 (\d)+ 中,捕获组不会再次重复匹配。正则表达式再次重复引用同一组。如果您在 1234 上尝试 (\d)+ 正则表达式,组 1 将包含 4,即最后一次捕获。

简而言之,每次正则表达式迭代捕获括号时,第 1 组都会被覆盖。

使用两个正则表达式,您可以将问题分为两部分。首先匹配AddAgenda中的三个参数。然后将两个参数拆分在大括号中。

First regular表达式可以是:

AddAgenda\("([^"]+)",\s*\{\s*([^}]+)\},\s*\{\s*([^}]+)\s*\}\)

Second regular expression非常简单。

([\w_]+)

在这种情况下,在 java 中您可以执行以下代码:

Matcher m = Pattern.compile("[\\w_]+").matcher(s);
while (m.find()) {
System.out.println(m.group());
}

关于组内的 Java 正则表达式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42041312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com