gpt4 book ai didi

regex - Notepad++ 正则表达式组捕获语法

转载 作者:行者123 更新时间:2023-12-05 00:02:15 27 4
gpt4 key购买 nike

我在一个文本文件中有一个标签名称列表,我想在 Notepad++ 中使用查找和替换来操作它们,它们列出如下:

MyLabel_01
MyLabel_02
MyLabel_03
MyLabel_04
MyLabel_05
MyLabel_06

我想在 Notepad++ 中将它们重命名为:
Label_A_One
Label_A_Two
Label_A_Three
Label_B_One
Label_B_Two
Label_B_Three

我在 Notepad++ 的替换对话框中使用的正则表达式来捕获标签名称如下:
((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

我的问题是 Notepad++ 没有注册上述正则表达式的语法。当我在替换对话框中点击计数时,它返回 0 次。不确定语法中有什么错误。是的,我确保选择了正则表达式单选按钮。帮助表示赞赏。

更新:

尝试转义括号,仍然没有用:
\(\(MyLabel_0\)\((1\)|\(2\)|\(3\)|\(4\)|\(5\)|\(6\)\)\)

最佳答案

Ed 的响应显示了一种工作模式,因为 Notepad++ 不支持交替,但是您的问题的其余部分不能仅由正则表达式处理。正则表达式查找/替换方法无法实现您尝试做的事情。您想要的结果涉及无法用正则表达式表达的逻辑条件。 replace 方法所能做的就是重新排列项目并引用捕获的项目,但你不能告诉它使用“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);

您应该能够轻松使用它。或许你可以下载 LINQPadVisual C# Express这样做。

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

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

关于regex - Notepad++ 正则表达式组捕获语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com