[英]How to write this Java regex?
我需要用连字符将字符串分成单词。 例如:
“ WorkInProgress”转换为“进行中的工件”
“ NotComplete”转换为“ Not-Complete”
在大多数情况下,一个单词以大写字母开头,以小写字母结尾。
但是有一个例外,“ CIInProgress”应转换为“ CI-In-Progress”。
我写的像下面的代码一样,任何具有小写字母或“ CI”,大写字母的模式都将在中间添加“-”。 但是它仍然不能用于“ CIInProgress”。 谁能告诉我如何纠正它?
String str;
String pattern = "([a-z|CI]+)([A-Z])";
str= str.replaceAll(pattern, "$1\\-$2");
您可以在后面使用否定式
正则表达式:
(?<!^)([A-Z][a-z])
替换字符串:
-$1
说明:
(?<!^)
此处使用负向后看,它断言字符[AZ]
(大写)和后面的[az]
(小写)是不是开始锚。 只有满足上述条件时,大写字母和后面的小写字母才会匹配。 ()
捕获组用于捕获匹配的字符,捕获的字符被存储到组中。 稍后,您可以通过引用其组索引号来获取捕获的字符。
码:
System.out.println("WorkInProgress".replaceAll("(?<!^)([A-Z][a-z])", "-$1"));
System.out.println("NotComplete".replaceAll("(?<!^)([A-Z][a-z])", "-$1"));
System.out.println("CIInProgress".replaceAll("(?<!^)([A-Z][a-z])", "-$1"));
输出:
Work-In-Progress
Not-Complete
CI-In-Progress
你不能有|
在角色课上 它将被解释为字面上的竖线字符。 尝试:
String pattern = "([a-z]+|CI)([A-Z])";
尝试这个
str= str.replaceAll("(?<=\\p{javaLowerCase})(?=\\p{javaUpperCase})", "-");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.