gpt4 book ai didi

c# - 用于从字符串中删除除第一个和最后一个字符之外的元音的正则表达式

转载 作者:行者123 更新时间:2023-11-30 19:02:38 25 4
gpt4 key购买 nike

我正在尝试从字符串中删除除第一个和最后一个字符之外的所有元音。我尝试了 2 个表达式并使用了 2 种方法,但都是徒劳的。我在下面描述了它们。有人对此有正则表达式吗?

例如

原始字符串 -- source = apeaple

在正则表达式之后 -- 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

最佳答案

你需要像这样环顾四周

(?<!^)[aouieyAOUIEY](?!$)

C#支持,功能非常强大

string resultString = null;
try {
resultString = Regex.Replace(subjectString, "(?<!^)[aeui](?!$)", "");
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}

更新 1

T.W.R.Cole 告诉我英语中有一条特殊规则(“这不适用于像“Anyanka”这样的单词,其中内部的 'y' 用作辅音”)

以下更改应该使用负先行技术来做到这一点:

(?<!^)([aouie]|y(?![aouie]))(?!$)

这次启用匹配不区分大小写的正则表达式修饰符,它使正则表达式比原来的更简单

如果 y 后跟另一个 y 仍然意味着 y 是辅音(嗯...有这样的词吗)因此不应该消失比 y 也必须列在最后一个字符类中:

(?<!^)([aouie]|y(?![aouiey]))(?!$)

我重复一遍,我使用 C# 作为我的正则表达式方言,它对环视技术有很好的支持。

关于c# - 用于从字符串中删除除第一个和最后一个字符之外的元音的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com