从字符串开头删除所有或某些特殊字符

时间:2018-12-19 12:58:23

标签: java regex

我正在经历一个场景,我必须通过jdbc语句创建表,并且我收到表名作为方法参数。使用了Oracle数据库,并且Oracle具有诸如表名之类的命名规则,不应以以下任何字符$#_开头。我只想从开头而不是in_between或结尾替换所有那些特殊字符。例如:

#_PHYSICIANSPHYSICIANS

##_#_PHYSICIANSPHYSICIANS

##_#_PHYSICIANS_#_NAMEPHYSICIANS_#_NAME

我应该使用什么正则表达式从一开始就替换这些字符?

4 个答案:

答案 0 :(得分:4)

无论您想从一开始删除任何字符,都可以将它们放入字符集中并使用此正则表达式,

^[#_]+

并将其替换为空字符串。

这里^标记字符串的开始,[#_]+表示字符集中的一个或多个字符。

Java代码

List<String> list = Arrays.asList("#_PHYSICIANS","##_#_PHYSICIANS","##_#PHYSICIANS_#_NAME");
list.forEach(x -> System.out.println(x + " --> " + x.replaceAll("^[#_]+", "")));

打印

#_PHYSICIANS --> PHYSICIANS
##_#_PHYSICIANS --> PHYSICIANS
##_#PHYSICIANS_#_NAME --> PHYSICIANS_#_NAME

答案 1 :(得分:2)

尝试一下。如果它对您有用

^($|#|_)*

https://regex101.com/r/wg9TEe/1

答案 2 :(得分:1)

s = s.replaceFirst("^[#_$]+", "");

^表示从头开始,[...]列出字符,...+一个或多个字符。

答案 3 :(得分:1)

这会删除任何字符之前的部分。

 String text = "#_PHYSICIANS_#";
 Pattern p = Pattern.compile("\\p{L}");
 Matcher m = p.matcher(text);
 if (m.find()) {
   System.out.println(m.start());
   String result = text.substring(m.start(), text.length());
   System.out.println(result);
 }