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