gpt4 book ai didi

java - 在 Java 中使用正则表达式提取特定值

转载 作者:行者123 更新时间:2023-12-02 02:53:12 26 4
gpt4 key购买 nike

我有几个粗略形式的字符串:

String s = "Rendering content from websiteNAme using user agent userAgentNameWithSpaces ; for user username ; at time someTime";

我想提取 websiteName、userAgentNameWithSpaces、username 和 someTime 的值。我已经尝试过以下代码。

private static final Pattern USER_NAME_PATTERN = Pattern.compile("for user.*;");
final Matcher matcher = USER_NAME_PATTERN.matcher(line);
matcher.find() ? Optional.of(matcher.group(group)) : Optional.empty();

它返回整个字符串“for user username”,之后我必须将 for user 字符串替换为空字符串才能获取用户名。但是,我想知道是否有正则表达式可以直接获取用户名?

最佳答案

您可以使用正则表达式组:

Pattern pattern = Pattern.compile("for user (\\w+)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
}

一对括号()形成一个组,可以由匹配器使用group方法获得(因为它是第一个括号,这是组 1)。

\w 表示“单词字符”(字母、数字和 _),+ 表示“一次或多次出现”。所以 \w+ 基本上意味着“一个单词”(假设您的用户名只有这些字符)。 PS:请注意,我必须转义 \,因此结果表达式为 \\w+

这段代码的输出是:

username

<小时/>

如果您想匹配所有值(websiteName、userAgentNameWithSpaces 等),您可以执行以下操作:

Pattern pattern = Pattern.compile("Rendering content from (.*) using user agent (.*) ; for user (.*) ; at time (.*)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}

输出将是:

websiteNAme
userAgentNameWithSpaces
username
someTime

请注意,如果 userAgentNameWithSpaces 包含空格,则 \w+ 将不起作用(因为 \w 与空格不匹配),因此 .* 在这种情况下可以工作。

<小时/>

但您也可以使用 [\w ]+ - 括号 [] 表示“我体内的任何字符”,因此 [\w ] 表示“单词字符或空格”(请注意,w] 之间有一个空格。因此代码将是(使用用户名进行测试)空格):

String s = "Rendering content from websiteNAme using user agent userAgent Name WithSpaces ; for user username ; at time someTime";
Pattern pattern = Pattern.compile("Rendering content from (.*) using user agent ([\\w ]+) ; for user (.*) ; at time (.*)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}

输出将是:

websiteNAme
userAgent Name WithSpaces
username
someTime
<小时/>

注意:您可以在调用 matcher.group(n) 之前测试组是否匹配。 matcher.groupCount() 方法返回匹配的组数(因为如果您调用 matcher.group(n) 且组 n 则不会可用,您将收到 IndexOutOfBoundsException)

关于java - 在 Java 中使用正则表达式提取特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504207/

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