我要用java匹配一个字符串,如果该字符串是以标点符号开头或结尾的,我就要把这些标点去掉,但是有几个特殊的词例外,如".net"这样的词如果在字符串前面则不匹配,如"c++"、"c#"这样的在字符串后面也不匹配,我自己写了一个:
^[\p{Punct}]*(?!net)|(?<!(c|c\+))[\p{Punct}]*$但实际上并不对,诸如"&net"、"@net"、"c-"、"c}"这样的词和".net"、"c++"、"c#"这些词一样不被处理。
各位大侠有没有更好的方法。先谢谢了!
^[\p{Punct}]*(?!net)|(?<!(c|c\+))[\p{Punct}]*$但实际上并不对,诸如"&net"、"@net"、"c-"、"c}"这样的词和".net"、"c++"、"c#"这些词一样不被处理。
各位大侠有没有更好的方法。先谢谢了!
String[] a={"@abc","bc%",".net","@net","c++","c#","c%%"};
String reg="^(?!\\.net)[\\W]+";
String reg2="[\\W]+(?<!(c\\+\\+|c#))$";
for(int i=0;i<a.length;i++){
a[i]=a[i].replaceAll(reg, "").replaceAll(reg2, "");
System.out.println(a[i]);
} }
这样试试
<filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct})*(?!net)|(?<!(c|c\+))(\p{Punct})*$" replacement="$2"/>
<filter class="achievo.support.analyzers.StrProcessTokenFilterFactory"/>
下面的那个filter是我自己写的,做二次处理,不过还是谢谢上面两位