加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 记事本RegeEx组捕获语法

发布时间:2020-12-14 05:55:33 所属栏目:百科 来源:网络整理
导读:我在文本文件中有一个标签名称列表,我想在记事本中使用“查找和替换”进行操作,它们列出如下: MyLabel_01MyLabel_02MyLabel_03MyLabel_04MyLabel_05MyLabel_06 我想在记事本中将它们重命名为以下内??容: Label_A_OneLabel_A_TwoLabel_A_ThreeLabel_B_OneLa
我在文本文件中有一个标签名称列表,我想在记事本中使用“查找和替换”进行操作,它们列出如下:

MyLabel_01
MyLabel_02
MyLabel_03
MyLabel_04
MyLabel_05
MyLabel_06

我想在记事本中将它们重命名为以下内??容:

Label_A_One
Label_A_Two
Label_A_Three
Label_B_One
Label_B_Two
Label_B_Three

我在记事本的替换对话框中使用的正则表达式捕获标签名称如下:

((MyLabel_0)((1)|(2)|(3)|(4)|(5)|(6)))

我想按如下方式替换每个捕获组:

1 = Label_
2 = A_One
3 = A_Two
4 = A_Three
5 = B_One
6 = B_Two
7 = B_Three

我的问题是记事本没有注册上面的正则表达式的语法.当我在替换对话框中点击计数时,它返回0次.不确定语法中有什么问题.是的,我确保选择了正则表达式单选按钮.感谢帮助.

更新:

试图逃避括号,仍然没有工作:

((MyLabel_0)((1)|(2)|(3)|(4)|(5)|(6)))

解决方法

Ed的响应显示了一种工作模式,因为记事本不支持交替,但是单独使用regex无法处理其余问题.使用正则表达式查找/替换方法无法实现您的目标.您期望的结果涉及无法在正则表达式中表达的逻辑条件.您可以使用替换方法重新排列项目并参考捕获的项目,但您不能告诉它使用“A”表示值1-3,“B”表示4-6.此外,您不能分配这样的占位符.它们实际上是您反向引用的捕获组.

为了达到您已经显示的结果,您需要编写一个小程序,以便检查捕获的值并执行适当的替换.

编辑:这是一个如何在C#中实现这一目标的示例

var numToWordMap = new Dictionary<int,string>();
numToWordMap[1] = "A_One";
numToWordMap[2] = "A_Two";
numToWordMap[3] = "A_Three";
numToWordMap[4] = "B_One";
numToWordMap[5] = "B_Two";
numToWordMap[6] = "B_Three";

string pattern = @"bMyLabel_(d+)b";
string filePath = @"C:temp.txt";
string[] contents = File.ReadAllLines(filePath);

for (int i = 0; i < contents.Length; i++)
{
    contents[i] = Regex.Replace(contents[i],pattern,m =>
        {
            int num = int.Parse(m.Groups[1].Value);
            if (numToWordMap.ContainsKey(num))
            {
                return "Label_" + numToWordMap[num];
            }
            // key not found,use original value
            return m.Value;
        });
}

File.WriteAllLines(filePath,contents);

您应该可以轻松使用它.也许你可以下载LINQPad或Visual C# Express这样做.

如果您的文件太大,这可能是一种低效的方法,在这种情况下,您可以使用StreamReader和StreamWriter分别从原始文件中读取并将其写入另一个文件.

另请注意,我的示例代码会写回原始文件.出于测试目的,您可以将该路径更改为另一个文件,以免被覆盖.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读