我想創建一個正則表達式來查找和替換大寫字符根據某些條件。如何基於某些條件創建正則表達式
在字符串中找到一組大寫字符的起始大寫字母,並在起始大寫字母之前將其替換爲小寫字母和*
。 如果在大寫字母后面有小寫字母,則在大寫字母開始前用大寫字母替換大寫字母並替換大寫字母*
。
輸入字符串:stackOVERFlow
預期輸出:stack*over*flow
我試過,但無法得到它完美的工作。
有關如何創建正則表達式的任何想法? 謝謝
我想創建一個正則表達式來查找和替換大寫字符根據某些條件。如何基於某些條件創建正則表達式
在字符串中找到一組大寫字符的起始大寫字母,並在起始大寫字母之前將其替換爲小寫字母和*
。 如果在大寫字母后面有小寫字母,則在大寫字母開始前用大寫字母替換大寫字母並替換大寫字母*
。
輸入字符串:stackOVERFlow
預期輸出:stack*over*flow
我試過,但無法得到它完美的工作。
有關如何創建正則表達式的任何想法? 謝謝
那麼預期的輸入和輸出是有點不合邏輯的:你低於「流量」中的「f」,但不包括在星號中。
無論如何,你想要的正則表達式非常簡單:@"[A-Z]+?"
。這可以非常匹配一個或多個大寫字母字符串(不要以爲匹配的字符類相對較窄就會產生差異)。
現在,要做的查找/替換,你會做類似如下:
Regex.Replace(inputString, @"([A-Z]+?)", "*$1*").ToLower();
這可以簡單地認爲一個或多個大寫字母字符所有出現,無論在哪裏,找到匹配它來替換它本身被星號包圍。這是圍繞着但不是降級; .NET Regex不提供這種字符串修改。但是,由於操作的最終結果應該是一個包含所有小寫字符的字符串,只需使用ToLower()就可以得到預期的結果。
KeithS的溶液可以被簡化有點
Regex.Replace("stackOVERFlow","[A-Z]+","*$0*").ToLower()
然而,這將產生stack*overf*low
包括恆星之間的f
。如果要排除的最後一個大寫字母,使用下列表達式
Regex.Replace("stackOVERFlow","[A-Z]+(?=[A-Z])","*$0*").ToLower()
這將產生stack*over*flow
這使用模式find(?=suffix)
,它找到一個後綴之前的位置。
我不相信您的輸入/輸出與您的描述相符。 – Brendan