簡體   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