gpt4 book ai didi

java - 以某个字符串开头的字符串的正则表达式

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

我有一些字符串,具有以下类型:(notice)Any_other_string(注意:() 在此字符串中包含`。

所以,我想将此字符串分成两部分:(notice) 和其余部分。我这样做:

private static final Pattern p1 = Pattern.compile("(^\\(notice\\))([a-z_A-Z1-9])+");
String content = "(notice)Stack Over_Flow 123";

Matcher m = p1.matcher(content);

System.out.println("Printing");

if (m.find()) {
System.out.println(m.group(0));
System.out.println(m.group(1));
}

我希望结果是 (notice)Stack Over_Flow 123,但结果却是:(notice)Stack(通知)

我无法解释这个结果。哪个正则表达式适合我的目的?

最佳答案

问题 1:group(0) 将始终返回整个匹配项 - 这是在 javadoc 中指定的- 实际捕获组从索引 1 开始。只需将其替换为以下内容:

System.out.println(m.group(1));
System.out.println(m.group(2));

问题 2:您没有考虑空格和其他字符,例如下划线(甚至没有数字 0)。我建议使用点 . 来匹配未知字符。或者将 \\s (空格)和 _ 添加到您的正则表达式中。以下任一正则表达式应该可以工作:

(^\\(notice\\))(.+)
(^\\(notice\\))([A-Za-z0-9_\\s]+)

请注意,您需要在捕获组内使用 +,否则它只会找到第二部分的最后一个字符。

关于java - 以某个字符串开头的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16119905/

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