gpt4 book ai didi

java - 正则表达式;用于捕获重复多次的特定组

转载 作者:行者123 更新时间:2023-12-02 07:56:50 24 4
gpt4 key购买 nike

比较使用和不使用正则表达式如何完成下面提到的两项任务。问题:

基于短信的送餐格式为:

PABUSOG 斜杠或逗号重复无限次@

//数量只能是数字。为简单起见,假设数量始终是整数

例如PABUSOG STRFRY_SMAI/2 HSHBRWN_BRGR/1 COFEEFLT/1 @En311

它将捕获以下内容:

STRFRY_SMAI - 2HHBRWN_BRGR - 1科菲弗特 - 1

这是我的示例代码://doing with regex

String message = "PABUSOG ASD_ASD/1 ASD_ASA/2";

Pattern pattern = Pattern.compile("PABUSOG(\\s+([A-Z]+_[A-Z]+)(/|,)([0-9]))+"
,Pattern.CASE_INSENSITIVE);

Matcher m = pattern.matcher(message);

try
{
if (m.matches())
{

String food = m.group(2);
String quantity = m.group(4);

System.out.println(food + " -- " + quantity + "\\n");


}
}
catch (NullPointerException e)
{
}

它显示 ASD_ASA -- 2,它覆盖第一个,即 ASD_ASD/1。

必须显示

ASD_ASD -- 1

ASD_ASA -- 2

最佳答案

您无法通过单个正则表达式为您提供组内的所有数据来实现这一目标。而且也不需要复杂的正则表达式。但如果您更喜欢正则表达式,请尝试迭代搜索模式。

if (!message.startsWith("PABUSOG")) {
return;
}

Pattern pattern = Pattern.compile("([A-Z_]+)[/,]([0-9])+", Pattern.CASE_INSENSITIVE);

Matcher m = pattern.matcher(message);
while (m.find()) {
String food = m.group(1);
String quantity = m.group(2);

System.out.println(food + " -- " + quantity);
}

无需复杂的正则表达式,您可以使用 String API 执行以下操作:

// Check for correct header
if (!message.startsWith("PABUSOG")) {
return;
}

// split by whitespaces
String[] items = message.split("\\s+");
// skip header and iterate over remaining items
for (String item : Arrays.asList(items).subList(1, items.length)) {
// split each item by / or ,
String[] foodQuantity = item.split("[/,]");
assert foodQuantity.length == 2;

String food = foodQuantity[0];
String quantity = foodQuantity[1];

System.out.println(food + " -- " + quantity);
}

要跳过以 @ 开头的项目,您可以添加

if (item.startsWith("@")) {
break; // or continue if it can be not the last
}

如果您确定此类项目始终存在并终止序列,则按以下方式在循环内或限制subList:Arrays.asList(items).subList(1, items.length - 1).

顺便说一句,您的模式 [A-Z]+_[A-Z]+ 与示例中的 COFEEFLT 不匹配。

关于java - 正则表达式;用于捕获重复多次的特定组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507889/

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