[英]c# - regex to remove vowels from string except first and last character
我試圖從字符串中刪除除第一個和最后一個字符之外的所有元音。 我試過2個表達式並使用2種方法但是徒勞無功。 我在下面描述了它們。 有沒有人有正則表達式?
例如
原始字符串 - source = apeaple
在regex之后 - source_modified = apple(這是預期的)
我嘗試了表達式([a-zA-Z])[aeiouAEIOU]([a-zA-Z])
但這個表達式也刪除了重復的字符。 因此,當我應用上述表達式時,會發生以下情況
使用的代碼 -
Regex reg = new Regex("([a-zA-Z])[aeiouAEIOU]([a-zA-Z])"); string source_modified = reg.Replace(source, "");
原始字符串 - source = apeaple
代碼執行后 - source_modified = aple(刪除重復字符)
使用的代碼 - string source_modified = Regex.Replace(source, "([a-zA-Z])[aeiouAEIOU]([a-zA-Z])", "$1" + "$2");
原始字符串 - source = apeaple
代碼執行后 - source_modified = apaple(只刪除1個元音)
我也試過([a-zA-Z])[aeiouAEIOU]*([a-zA-Z])
但這只刪除1個元音而不是全部。 因此,當我應用上述表達式時,會發生以下情況
使用的代碼 -
Regex reg = new Regex("([a-zA-Z])[aeiouAEIOU]*([a-zA-Z])"); string source_modified = reg.Replace(source, "");
原始字符串 - source = apeaple
代碼執行后 - source_modified =“”(刪除所有字符)
使用的代碼 - string source_modified = Regex.Replace(source, "([a-zA-Z])[aeiouAEIOU]*([a-zA-Z])", "$1" + "$2");
原始字符串 - source = apeaple
代碼執行后 - source_modified = apeple
如果是這樣,為什么不刪除第一個和最后一個字符,刪除元音,然后再次縫合?
string sWord = "apeaple";
char cFirst = sWord[0], cLast = sWord[sWord.length-1];
sWord = sWord.substring(1, sWord.length -2);
sWord = cFirst.ToString() +
Regex.Replace(sWord , "[aouiyeAOUIYE]", String.Empty) +
cLast.ToString();
你需要一些看起來像這樣
(?<!^)[aouieyAOUIEY](?!$)
C#支持它,它非常強大
string resultString = null;
try {
resultString = Regex.Replace(subjectString, "(?<!^)[aeui](?!$)", "");
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
更新1
TWRCole告訴我英語中有一條特殊的規則(“這對於像”Anyanka“這樣的單詞不起作用,其中內部'y'用作輔音”)
以下更改應使用負前瞻技術執行此操作:
(?<!^)([aouie]|y(?![aouie]))(?!$)
這次啟用匹配不區分大小寫的正則表達式修飾符,它使正則表達式比原始更簡單
如果ay后跟另一個y仍然意味着y是一個輔音(euh ......是否有這樣一個單詞)因此不應該消失,因為ay必須也列在最后一個字符類中:
(?<!^)([aouie]|y(?![aouiey]))(?!$)
我再說一遍,我使用C#作為我的正則表達方言,它對外觀技術有很好的支持。
你需要用至少一個字符開始字符串,找到一個元音,然后用至少一個字符結束字符串。 嘗試:
(.+)[aeiouAEIOU](.+)
如果您想將其應用於包含多個單詞的字符串中的單個單詞, \\B[AEIOUaeiou]\\B
可能值得一試。 \\B
是非字邊界,即兩個相鄰字符既是字字符又是非字字符的任何位置。 如果兩個位置之間有一個元音,那么后一種情況顯然是不可能的。
不用說它也適用於僅包含單個單詞的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.