关于标点符号的正则表达式
所以我对正则表达式完全不熟悉 ,我正在尝试使用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()); } } }