gpt4 book ai didi

java - 标点符号的正则表达式

转载 作者:搜寻专家 更新时间:2023-10-30 21:14:48 24 4
gpt4 key购买 nike

所以我完全不熟悉正则表达式,我正在尝试使用 Java 的 java.util.regex 来查找输入字符串中的标点符号。我不知道我可能会提前得到什么样的标点符号,除了 (1) !, ?, ., ... 都是有效的标点符号,以及 (2) "<"和 ">"表示特殊的东西,并且不算作标点符号。该程序本身以伪随机方式构建短语,我想在句子经过随机过程之前去掉句末的标点符号。

我可以匹配带有任何标点符号的整个单词,但匹配器只会给我该单词的索引。换句话说:

Pattern p = Pattern.compile("(.*\\!)*?");
Matcher m = p.matcher([some input string]);

将抓取任何结尾带有 "!" 的单词。例如:

String inputString = "It is a warm Summer day!";
Pattern p = Pattern.compile("(.*\\!)*?");
Matcher m = p.matcher(inputString);
String match = inputString.substring(m.start(), m.end());

结果 --> 字符串匹配 ~ "day!"

但我想让 Matcher 只为 "!" 建立索引,这样我就可以将它分开。

我可能会使用 String.substring(...) 来表示我可能得到的每一种标点符号,但我希望我在使用正则表达式时有一些错误这样做。

最佳答案

Java 确实以迂回的方式支持 POSIX 字符类。对于标点符号,[:punct:] 的 Java 等价物是 \p{Punct}

请看下面link了解详情。

这是一个使用评论中的表达式的具体的工作示例

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

public class RegexFindPunctuation {

public static void main(String[] args) {
Pattern p = Pattern.compile("\\p{Punct}");

Matcher m = p.matcher("One day! when I was walking. I found your pants? just kidding...");
int count = 0;
while (m.find()) {
count++;
System.out.println("\nMatch number: " + count);
System.out.println("start() : " + m.start());
System.out.println("end() : " + m.end());
System.out.println("group() : " + m.group());
}
}
}

关于java - 标点符号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11705112/

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