微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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>标签以空字符串形式存在于结果变量中并打印最终输出.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐