gpt4 book ai didi

java - 将正则表达式匹配添加在一起

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

我想创建一个正则表达式来匹配以下字符串中的所有元素:

11 jan. 22:20 - Dam: Ik zal d'r zijn

我想匹配日期、时间、姓名 (Dam) 和消息。

目前,我有以下正则表达式:

checks date: [1-31 a-z]
checks message: ([^:]+)(.*)$
checks time: (([0-1]?[0-9]|2[0-3]):[0-5][0-9])
checks name: (?:\s[^:-]+)

如何将它们粘合在一起?我想这样使用它:

String date = matcher.group(1);
Time time = new Time(matcher.group(2));
String name = matcher.group(3);
Message message = new Message(matcher.group(4));
Chat chat = new Chat(date,time,name,message);

此外,名称不仅与 -\s 之后的值匹配,还与消息和部分时间匹配。

最佳答案

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

public class HelloWorld {
public static void main(String[] args) {
Pattern p = Pattern.compile("(\\d{1,2}\\s[a-z]{3})\\.?\\s(\\d{1,2}:\\d{1,2})\\s-\\s([a-z]+):\\s(.+)", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("11 jan. 22:20 - Dam: Ik zal d'r zijn");

while (m.find())
{
for (int i=1; i <= m.groupCount(); ++i)
System.out.println("group " + i + ": " + m.group(i));
}
}
}

输出:

group 1: 11 jan
group 2: 22:20
group 3: Dam
group 4: Ik zal d'r zijn

来自API的注释:

By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. Unicode-aware case-insensitive matching can be enabled by specifying the UNICODE_CASE flag in conjunction with this flag.

您可能想要捕获月份名称后面的句点,在这种情况下,您需要移动右圆括号。您可能还希望在名称中包含非字母字符,如果是这样,请更新 ([a-z]+) 字符类。

链接:Regex101 , RegexPlanet Java (在点击该链接时,您必须手动检查 CASE_INSENSITIVE 标志,不确定为什么他们不保留共享链接中的那些标志)。

关于java - 将正则表达式匹配添加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954179/

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