2010-10-28 134 views
0

我试图用Java编写一个正则表达式来摆脱所有的标题,并在一个字符串尾矿标点符号除了"-",但保持不变的话中的标点符号。正则表达式删除标题和尾矿标点符号

  1. 我想现在有""String regex = "[\\p{Punct}+&&[^-]]";更换标点符号,但它会删除字中的标点符号太多。

  2. 我也试图匹配模式:String regex = "[(\\w+\\p{Punct}+\\w+)]";Matcher.maches()匹配一组,但它给了我零输入String word = "#(*&wor(&d#)("

我想知道什么是对付在正则表达式组匹配的正确方法这种情况下

实例:

Input: @)($&[email protected])($&     Output: word 
Input: @)($)[email protected]#)(*$&$  Output: [email protected] 
+0

你可以放下一些样本数据吗? – Keng 2010-10-28 15:43:41

回答

2
Pattern p = Pattern.compile("^\\p{Punct}*(.*?)\\p{Punct}*$"); 
    Matcher m = p.matcher("@)($)[email protected]#)(*$&$"); 
    if (m.matches()) { 
     System.out.println(m.group(1)); 
    } 

为了给一些更多的信息,关键是有开始和结束的字符串的正则表达式标记(^和$),并有中间部分匹配非贪婪(使用*?而不是*)。

+0

被警告'\ p {Punct}'是POSIX'[[:punct:]]'字符类的仅ASCII版本。这个(相当小的)集合包括Unicode编码角度的字符,它们都属于'\ pP' *标点符号*和'\ pS' *符号。*这是因为Unicode在两个不同的通用类别中只有一个是POSIX。 – tchrist 2010-12-02 02:58:50

相关问题