本帖最后由 小白龙 于 2023-5-10 18:19 编辑
我要修改的多行字符串是一段C#代码, 里面{}环环相套! 可能必须要用平衡组了!
要点1: 类名和函数名后面的 { 的位置有如下两种情况
情况一 { 在新的行中
string FUN1()
{
}
情况二 { 在同一行的末尾
string FUN1() {
}
要点2: 函数的参数里可能有()嵌套()的情况
函数体里可能有{}嵌套{}的情况
要点3: 既要界定返回值类型的文本, 又要判断修饰词是否存在
感觉那三个需求, 用2个正则平衡式应该可以实现
下面代码的注释中有详细的描述, 请求路过大佬帮忙
情况1中的代码可以删除FUN1了, 但是因为没有使用平衡组, 如果{}互相嵌套就不灵了- #--------------------------------------------------------------------情况1: 函数FUN1返回值类型void
-
- $s1 = @'
- using System;
-
- public class CLA
- {
- void FUN1()
- {
- Console.WriteLine("FUN1");
- }
- }
- '@
- $s1 -replace '(?s)void FUN1\(\).*?\}', ''
-
-
- #--------------------------------------------------------------------情况2: 返回值类型改为了 string
-
- $s2 = @'
- using System;
-
- public class CLA
- {
- string FUN1()
- {
- return "FUN1";
- }
- }
- '@
-
- #--------------------------------------------------------------------情况3: 加了修饰词 public
-
- $s3 = @'
- using System;
-
- public class CLA
- {
- public void FUN1()
- {
- Console.WriteLine("FUN1");
- }
- }
- '@
-
- #--------------------------------------------------------------------情况4: 加了修饰词 public static
-
- $s4 = @'
- using System;
-
- public class CLA
- {
- public static string FUN1()
- {
- return "FUN1";
- }
- }
- '@
-
- # 需求1 用1个正则表达式能删除指定函数名的函数, 要考虑函数名前的多种修饰词的情况
- #例如: 把上面四种情况中的 FUN1 函数删除掉
-
- # 需求2 用正则表达式: 修改指定函数名前的修饰词(不要修改返回值类型)
- #例如: 把 FUN1 函数的修饰词改为 public static (如果没有修饰词就加上,如果有就修改)
-
- # 需求3 用正则表达式: 修改指定类名前的修饰词
- #例如: 把 CLA 类的修饰词改为 private (如果没有修饰词就加上,如果有就修改)
复制代码
|