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

bfrts1fy  于 2023-06-25  发布在  其他
关注(0)|答案(4)|浏览(139)

我正在经历一个场景,我必须通过JDBC语句创建表,并且我正在接收表名作为方法参数。使用Oracle数据库,Oracle具有命名规则,如表名不应以以下字符$#_中的任何一个开头。我只想从开头替换所有的特殊字符,而不是从中间或结尾替换。例如:
#_PHYSICIANSPHYSICIANS
##_#_PHYSICIANSPHYSICIANS
##_#_PHYSICIANS_#_NAMEPHYSICIANS_#_NAME
我应该使用什么正则表达式来从一开始就替换这些字符?

r9f1avp5

r9f1avp51#

无论你想从一开始去掉什么字符,你都可以把它们放在字符集中,然后使用这个正则表达式,

^[#_]+

并替换为空字符串。
这里^标记字符串的开始,[#_]+表示字符集中的一个或多个字符。
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
mzillmmw

mzillmmw2#

试试这个,如果对你有效的话

^($|#|_)*

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

pkln4tw6

pkln4tw63#

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

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

jaxagkaj

jaxagkaj4#

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

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

相关问题