c# - 如何仅使用一个正则表达式将多个字符串替换为另一个字符串,还是必须使用多个正则表达式和临时字符串?
问题描述
我有一个变量被赋予这样的值:
vm.WordType = phrase.WordType;
其中phrase.WordType 的值可以是这样的:
"Godan verb with ru ending, Transitive Verb"
我想把它改成
"Godan v with ru end, Transitive v"
例如,我可以使用正则表达式将动词替换为 v,但有没有办法可以使用正则表达式进行更多替换,例如将“结尾”替换为“结束”,或者我是否必须以某种方式将多个正则表达式串在一起并使用临时变量?
vm.WordType = Regex.Replace(phrase.WordType, "verb", "v", RegexOptions.IgnoreCase);
解决方案
您当然可以只调用Regex.Replace
2 次 - 第一次替换“动词”,第二次替换“结尾”。
如果你不喜欢这样,你可以像这样在一个正则表达式中做到这一点:
Regex.Replace("Godan verb with ru ending, Transitive Verb", "(v)erb|(end)ing", "$1$2", RegexOptions.IgnoreCase)
我在这里使用的正则表达式是:
(v)erb|(end)ing
它匹配“动词”并将“v”放入第 1 组,或者匹配“结尾”并将“结束”放入第 2 组。
替换为$1$2
,表示第 1 组和第 2 组。
假设您还想用“trans”替换“transitive”,您可以轻松地将正则表达式更改为:
(v)erb|(end)ing|(trans)itive
并替换所有三个组:
$1$2$3
请注意,这种方法将保留大小写,因此“动词”变为“V”,“动词”变为“v”。如果这是不可取的,您可以传入 aMatchEvaluator
将它们转换为小写:
Regex.Replace(
"Godan verb with ru ending, Transitive Verb",
"(v)erb|(end)ing",
x => string.Join("", x.Groups.Cast<Group>().Skip(1).Select(y => y.Value)).ToLowerInvariant(),
RegexOptions.IgnoreCase)
推荐阅读
- sql - 您可以对一个数据库表进行双重继承吗?
- r - R传单限制?数据太多?
- asp.net-core - 如何在不提交的情况下触发 ASP .NET Core MVC 客户端验证
- python - 在 Python 中将 NLTK FreqDist 的结果作为一行写入 .csv 文件
- swiftui - 无法将 SwiftUI.ExtensionDelegate 转换为 ExtensionDelegate
- r - 如何将 lm 模型应用于 r 中一个数据帧内的不同处理
- sql - 根据来自同一表的另一条记录的值更新值
- html - Bootstrap:图标栏仅在某些页面中不可见,我无法更改其颜色
- google-cloud-platform - GCP > Video Intelligence:准备 CSV 错误:在根级 csv 中有严重错误,预期 2 列,但仅找到 1 列
- mongoose - $AddFields 添加数组而不是单值