繁体   English   中英

如何编写此Java正则表达式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM