gpt4 book ai didi

Java 正则表达式 : How to extract just the variable portion of a pattern match

转载 作者:行者123 更新时间:2023-12-02 10:47:31 25 4
gpt4 key购买 nike

假设您有以下字符串:

id: 1 name: Joe age: 27 id: 2 name: Mary age:22

您想要提取“age:”之后的每个标记,但不是字符串“age:”本身。

所以我希望我的 Matchergroup() 返回 27 和 22,而不是“age: 27”和“age:22”

有没有办法在 Java Regex 语法中指定此指令,这似乎与我在 Perl 中学习 Regex 基础知识的方式有很大不同?

这是我的代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegExTest
{
public static void main(String[] args)
{
Pattern namePtrn = Pattern.compile("age: *\\w*");

String data = "id: 1 name: Joe age:27 id: 2 name: Mary age:22";

Matcher nameMtchr = namePtrn.matcher(data);

while(nameMtchr.find())
{
String find = nameMtchr.group();

System.out.println ("\t" + find);
}
}
}

在 Perl 中,我可以使用 {} 来限制我想要提取的模式部分

while($text =~ m/(age:{\w+})/g)
{
my $find = $1;

if($find)
{
print "\nFIND = ".$find;
}
}

会返回

FIND = 27
FIND = 22

如果我把 {} 放在年龄周围,就像

while($text =~ m/({age:\w+})/g)

它会返回

FIND = age: 27
FIND = age:22

所以我正在寻找类似于 Perl 的 {} 的东西,但是是用 Java 编写的。

最佳答案

如果您使用 Matcher.group(1) 而不是 Matcher.group(),您可以捕获减去“age:”的模式:

String data = "id: 1 name: Joe age:27 id: 2 name: Mary age:22";
Pattern namePtrn = Pattern.compile("age:(\\w+)");
Matcher nameMtchr = namePtrn.matcher(data);

while (nameMtchr.find()) {
String find = nameMtchr.group(1);
System.out.println("\t" + find);
}

关于Java 正则表达式 : How to extract just the variable portion of a pattern match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12787801/

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