gpt4 book ai didi

java - 使用 Pattern&Matcher 返回没有标记的子字符串

转载 作者:行者123 更新时间:2023-11-29 03:36:15 25 4
gpt4 key购买 nike

我想使用 Pattern 和 Matcher 将以下字符串作为多个变量返回。

    ArrayList <Pattern> pArray = new ArrayList <Pattern>();
pArray.add(Pattern.compile("\\[[0-9]{2}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}\\]"));
pArray.add(Pattern.compile("\\[\\d{1,5}\\]"));
pArray.add(Pattern.compile("\\[[a-zA-Z[^#0-9]]+\\]"));
pArray.add(Pattern.compile("\\[#.+\\]"));
pArray.add(Pattern.compile("\\[[0-9]{10}\\]"));
Matcher iMatcher;
String infoString = "[03/12/13 10:00][30][John Smith][5554215445][#Comment]";
for (int i = 0 ; i < pArray.size() ; i++)
{
//out.println(pArray.get(i).toString());
iMatcher = pArray.get(i).matcher(infoString);

while (dateMatcher.find())
{
String found = iMatcher.group();
out.println(found.substring(1, found.length()-1));
}
}
}

程序输出:

[03/12/13 10:00]

[30]

[John Smith]

[\#Comment]

[5554215445]

我唯一需要做的就是让程序不打印括号和# 字符。我可以很容易地避免在循环内使用子字符串打印括号,但我无法避免 # 字符。 # 只是字符串中的注释标识符。

这可以在循环内完成吗?

最佳答案

这个怎么样?

public static void main(String[] args) {
String infoString = "[03/12/13 10:00][30][John Smith][5554215445][#Comment]";
final Pattern pattern = Pattern.compile("\\[#?(.+?)\\]");
final Matcher matcher = pattern.matcher(infoString);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}

您只需要使 .+ 非贪婪,它就会匹配方括号之间的所有内容。然后我们使用一个匹配组来获取我们想要的东西,而不是使用整个匹配的模式,一个匹配组由 (pattern) 表示。 #? 匹配匹配组之前的散列,因此它不会进入组。

使用 matcher.group(1) 检索匹配组。

输出:

03/12/13 10:00
30
John Smith
5554215445
Comment

关于java - 使用 Pattern&Matcher 返回没有标记的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382756/

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