【问题标题】:How to replace a string with regular expression looking for ':' and variable white space?如何用正则表达式替换字符串以查找“:”和可变空格?
【发布时间】:2020-01-20 19:04:58
【问题描述】:

假设我有一个字符串:

公共类 MyClass : BaseClass

我想用“MyNewClass”之类的任意替换来替换“MyClass”

我可以用这样的正则表达式来做到这一点:

Regex.Replace(fileOrigContents, $@"([^\p{{L}}0-9\.]){oldClassName}([^\p{{L}}0-9:])", $"$1{newClassName}$2$3");

但这并不包括字符串可能是的情况

公共类 MyClass: BaseClass

公共类 MyClass:BaseClass

在这些情况下,不会发生字符串替换。

对于第二种情况,我能够通过此修改使其工作:

Regex.Replace(fileOrigContents, $@"([^\p{{L}}0-9\.]){oldClassName}(\s*:\s*[^\p{{L}}0-9:])", $"$1{newClassName}$2");

但这不适用于第三种情况。如何使用正则表达式替换类名并覆盖空格和 ':' 的任意组合?

【问题讨论】:

  • 我希望您的“修改”适用于分号前后的任何空格组合。所以不清楚你的问题是什么。您需要提供一个良好的minimal reproducible example,以准确说明“不起作用” 的含义。
  • 明确一点:您的正则表达式有两个捕获组,但您的替换模式有三个 plecholder,$1$2$3 - 为什么?还是您发布的模式不是您实际使用的模式?
  • 另外,您提到的两种情况都不起作用,因为您最后一个捕获组模式匹配除字母、数字和冒号之外的任何字符。如果您删除它,它们将得到匹配,请参阅this regex demo

标签: c# .net regex string


【解决方案1】:

看看这是否有效:(?<=public class )MyClass *(?=:)

Demo

【讨论】:

    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多