gpt4 book ai didi

java - 如何使一个组可选,它捕获模式并捕获相同的组号?

转载 作者:行者123 更新时间:2023-12-01 14:41:43 25 4
gpt4 key购买 nike

Pattern pattern = Pattern.compile("\\d{4}\\s+[a-z|A-Z]{2}\\s+PLAIN\\sTEXT\\s+(.*?)\\(NS\\)");
Matcher matcher = pattern.matcher("2007 AL PLAIN TEXT ap2345 (NS)");
while (matcher.find())
{
System.out.println(matcher.group(1));
}

我希望它适用于 input1 = 2007 AL PLAIN TEXT ap2345 (NS) (上面的正则表达式确实适用于此),但它不适用于 input2 = "ap2345" >。我想在同一组号中捕获这两个字符串,这意味着我需要将之前的捕获设置为可选。我怎样才能做到这一点?

编辑:::当字符串值为 2007 AL PLAIN TEXT ap2345 (NS)ap2345

时,我希望相同的组号适用于两者

最佳答案

我不确定我是否正确理解了你的问题,所以在我解释任何内容之前只需检查这个正则表达式

(\\d{4}\\s+[a-zA-Z]{2}\\s+PLAIN\\sTEXT\\s+)?(\\w+)(\\s+\\(NS\\))?

喜欢

Pattern pattern = Pattern
.compile("(\\d{4}\\s+[a-zA-Z]{2}\\s+PLAIN\\sTEXT\\s+)?(\\w+)(\\s+\\(NS\\))?");
Matcher matcher = pattern.matcher("2007 AL PLAIN TEXT ap2345 (NS)");
while (matcher.find()) {
System.out.println(matcher.group(2));
}
<小时/>

2007 AL PLAIN TEXT ap2345 (NS) 输出的示例 1 -> ap2345

ap2345 输出的示例 2 -> ap2345

<小时/>

此正则表达式将尝试将可选部分 2007 AL PLAIN TEXT 存储在组 1 中。如果字符串不包含此部分,组 1 将包含 null。没关系,因为我们只对其后面的部分感兴趣,它将存储在组 2 中。我假设第 2 组只包含一个单词,这就是我使用 \\w+ 的原因(\\w 匹配字母、数字和 _ )。如果您想接受更多单词,请尝试使用 (.+?)(\\s+\\(NS\\)|$) 代替。

关于java - 如何使一个组可选,它捕获模式并捕获相同的组号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890038/

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