我想创建一个正则表达式来匹配以下字符串中的所有元素:
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之后的值匹配,还与消息和部分时间匹配。
2条答案
按热度按时间tuwxkamq1#
输出:
第一组:1月11日
第二组:22:20
第3组:大坝
第4组:ik zal d'r zijn
api注解:
默认情况下,不区分大小写的匹配假设仅匹配us ascii字符集中的字符。通过将unicode\u case标志与此标志一起指定,可以启用支持unicode的不区分大小写匹配。
您可能希望捕获月份名称后的句点,在这种情况下,您可以移动右括号。您可能还希望在名称中包含非字母字符,如果是,请更新
([a-z]+)
角色类。链接:regex101,regexplanet java(当你跟随链接时,你必须手动检查不区分大小写的标志,不知道为什么他们不保留那些在share链接中)。
lsmepo6l2#
这是正则表达式字符串
更新regex
查看此链接https://regex101.com/r/cp8cu9/2
测试:
或者你可以做一个循环来获取数据
查看此链接:https://regex101.com/r/cp8cu9/1 了解如何获取指定组(查看右侧边栏)
结果: