【发布时间】:2014-02-23 03:10:55
【问题描述】:
缩写:搜索: "{,[0-9][0-9]," 插入 Space+00... 得到替换的字符串段: "{,SPACE00[0-9][0-9]," 或找到的 [0-9][0-9] 序列的其他垃圾数据......那么我该如何搜索使用正则表达式并在中间插入???
长问题:
我正在尝试在一系列混合模型 CSV 分析数据中进行一系列简单的字符插入(实际上是数字)(五个文件,每个文件具有不同的模型参数,每个文件几百行)。
我在视觉上受到挑战,并希望插入填充字符来对数据进行排序,因此我可以专注于调整键值,而不是将数据文件保存到数据文件中。 这需要 CSV 数据行的格式是:
*Variable_symbolic-name*,{##,##,* ... ('CSV 数值数据列表集' ...},\n*
一条实际的数据线:
61,参数17,{,70,6,1,-1,3, 00,0,0,0,0,},,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
变形为:
61,参数17,\t\t{, 0070,6,1,-1,3, 00,0,0,0,0,},,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
给或取一个制表符以对齐所有 { 数字字段开始...
我发现搜索:"{,[0-9][0-9]," 失败但 "\{,[0-9][0-9] ," 在 搜索和替换 操作的查找部分 中成功...但是在如何执行实际操作时遇到了众所周知的难题替换(用插入) 这么短的长度。 (明明参数和文件这么多,我小心翼翼!)
但是,This Perl Help tutorial 让我不知道如何保留找到的范围并在之前插入填充(空格,零,如果是正则具体为零,如果为负,则为“-00”)简而言之,我需要知道如何在 Notepad++ 的替换字段中插入 2-3 个位置...并保留原始数据而不影响它!
这里的文章引用了替换段落和行,添加换行符等,但是这个简单的插入更改对你们来说似乎太简单了。但这对我来说已经沮丧了几个小时!
谢谢! // 弗兰克
已解决: 好消息:({,)([0-9][0-9],) 和 \1 xx\2 和 ({, )(@[0-9][0-9],) 并替换为 \1 xx@\2 ...无论是否使用制表符。显然,关键是 ([0-9][0-9],) 其中包括逗号的区分......虽然我不知道为什么一个小时前它似乎失败了,并进行了试验在索布里尼奥的帮助下。一定没试过序列。谢谢大家!
【问题讨论】:
-
在 Perl(以及几乎所有东西)中,
{,[0-9][0-9],匹配{,25,无需转义{。在这种情况下,它不是 metachar。所以,我想知道你为什么说它“失败”。 -
它失败了,因为它没有区分 {,25 和 {,2534,... 正如您在另一个线程中看到的那样,问题是位置歧视并用插入的子字符串替换找到的子字符串长度。尝试在 CSV 中创建具有可变左列长度的整齐列。 Tab 做了很多,但浪费了页面宽度。我可以忍受计算机输入流的速度比我能读的快,而且我们看到的只是几千字节文件中长度的 10% 的变化。文件最小长度可能是 4K 或更多,因此完全没有成本。谢谢!
-
其实这值得更正。 Notepad++ 中的 '{' 设置一个数字计数,因此当启用正则表达式时,'\{' 是查找所必需的。 '{' 的其他搜索模式运行良好。 // 弗兰克
-
我以为你在使用 Perl。不知道 Notepad++ 对正则表达式引擎使用什么,但如果它必须抖动
a{1,}和a{,1}之类的东西,它是一个糟糕的自定义字符选择。第一个是“a”的量词,第二个是字面量词。可能是旧的 BRE 之类的。