关于标点符号的正则表达式

所以我对正则表达式完全不熟悉 ,我正在尝试使用Java的java.util.regex来查找输入字符串中的标点符号。 我不知道我可能提前得到什么样的标点符号,除了(1)!,?,。,…都是有效的puncutation,(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()); 

结果 – >字符串匹配〜“天!”

但我希望Matcher索引只是"!" 所以我可以把它分开。

我可能会创建案例,并使用String.substring(...)来获取我可能获得的每种标点符号,但我希望我使用正则表达式时会出现一些错误。

我会尝试类似的字符类正则表达式

 "[.!?\\-]" 

[] s中添加您想要匹配的任何字符。 小心转义任何可能对正则表达式解析器有特殊含义的字符。

然后,您必须使用Matcher.find()迭代匹配,直到它返回false。

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

有关详细信息,请参阅以下链接 。

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

 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()); } } }