c# – 正则表达式改变文本案例

我想将标签间的文本替换为大写版本.
有没有办法只使用 Regex.Replace方法? (不使用IndexOf)

以下是我尝试的代码

string texto = "We are living in a <upcase>yellow submarine</upcase>. We don't have <upcase>anything</upcase> else.";                
Console.WriteLine(Regex.Replace(texto,"<upcase>(.*)</upcase>","$1".toupper()));

预期的结果是:

We are living in YELLOW SUBMARINE. We don't have ANYTHING else.

但我得到:

We are living in yellow submarine. We don't have anything else.

解决方法

我愿意,

string str = "We are living in a <upcase>yellow submarine</upcase>. We don't have <upcase>anything</upcase> else.";
string result = Regex.Replace(str,"(?<=<upcase>).*?(?=</upcase>)",m => m.ToString().toupper());
Console.WriteLine(Regex.Replace(result,"</?upcase>",""));

输出

We are living in a YELLOW SUBMARINE. We don't have ANYTHING else.

IDEONE

说明:

>(?< =< upcase>).*?(?=< / upcase>) – 匹配介于< upcase>之间的文本,< / upcase>标签. (?< = ...)调用positive lookbehind assertion,这里断言匹配必须以< upcase>开头.串. (?=< / upcase>)称为正向前瞻,断言匹配必须后跟< / upcase>串.因此,第二行代码将所有匹配的字符更改为大写,并将结果存储到结果变量中.> /?可选/(正斜杠).所以第三行代码替换了所有< upcase>或< / upcase>标签以空字符串形式存在于结果变量中并打印最终输出.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...