正则表达式除去第一个和最后一个字符串之外的字符串中的元音
我试图从字符串中除去第一个和最后一个字符的所有元音。 我用2个表达式尝试了两种方法,但徒劳无益。 我在下面描述了它们。 有人有这样的正则表达式吗?
例如
原始字符串 - 来源= apeaple
正则表达式后 - source_modified =苹果(这是预期的)
我尝试了表达式([a-zA-Z])[aeiouAEIOU]([a-zA-Z])
但是这个表达式也删除了重复的字符。 所以,当我应用上述表达式时发生以下情况
使用的代码 -
Regex reg = new Regex("([a-zA-Z])[aeiouAEIOU]([a-zA-Z])"); string source_modified = reg.Replace(source, "");
原始字符串 - 来源= apeaple
在代码执行后 - source_modified = aple(重复删除字符)
使用的代码 - string source_modified = Regex.Replace(source, "([a-zA-Z])[aeiouAEIOU]([a-zA-Z])", "$1" + "$2");
原始字符串 - 来源= 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, "");
原始字符串 - 来源= apeaple
在代码执行后 - source_modified =“”(所有字符都被删除)
使用的代码 - string source_modified = Regex.Replace(source, "([a-zA-Z])[aeiouAEIOU]*([a-zA-Z])", "$1" + "$2");
原始字符串 - 来源= apeaple
代码执行后 - source_modified = apeple
请帮忙! 提前致谢!
问候,
萨马
你需要一些像这样的环视
(?<!^)[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 ...是否有这样一个词),因此不应该消失,而且必须列在最后一个字符类中:
(?<!^)([aouie]|y(?![aouiey]))(?!$)
我再说一遍,我使用C#作为我的正则表达式,对查找技术有很好的支持。
如果是这样,为什么不删除第一个和最后一个字符,删除元音,然后再次缝合?
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();
您需要用至少一个字符开始字符串,找到一个元音,然后用至少一个字符结束字符串。 尝试:
(.+)[aeiouAEIOU](.+)
链接地址: http://www.djcxy.com/p/92827.html
上一篇: regex to remove vowels from string except first and last charаcter