查看atom.io regex finf中的断言并替换
我必须在一个非常大(>440000行)的文本文件中找到一些模式,如下所示:查看atom.io regex finf中的断言并替换,regex,atom-editor,Regex,Atom Editor,我必须在一个非常大(>440000行)的文本文件中找到一些模式,如下所示: negative,10946,N: 10947,P: 59316,7.4346858,52.3209003 145930 24941,N: 54399,P: 24940,7.4308326,52.323004 145943 positive,57656,N: 57658,P: 57655,9.7569868,53.7176063 131516 57694,N: 57695 9.677158,53.6762726 131
negative,10946,N: 10947,P: 59316,7.4346858,52.3209003
145930
24941,N: 54399,P: 24940,7.4308326,52.323004
145943
positive,57656,N: 57658,P: 57655,9.7569868,53.7176063
131516
57694,N: 57695
9.677158,53.6762726
131587
(?<=^.[0-9]{4,7})\n(?=[0-9]{4,7})
(^.[0-9]{4,7})(\n)([0-9]{4,7})
或者,换句话说,是一个整数,之后是换行符,最后是另一个整数
问题在于第2行和第3行之间的新线#6和#7:我必须在这里添加第二个\n并添加文本“两者”。我已经成功地编写了一个正则表达式,它可以发现这些新行的出现:
^.[0-9]{4,7}\n[0-9]{4,7}
这个正则表达式查找所有出现的换行符。但是:我真的不知道应该用什么替换这些文本部分。我想让这两个数字保持不变,但在已经存在的\n后面插入一个\n和“两者”
通常,我会使用如下环视断言:
negative,10946,N: 10947,P: 59316,7.4346858,52.3209003
145930
24941,N: 54399,P: 24940,7.4308326,52.323004
145943
positive,57656,N: 57658,P: 57655,9.7569868,53.7176063
131516
57694,N: 57695
9.677158,53.6762726
131587
(?<=^.[0-9]{4,7})\n(?=[0-9]{4,7})
(^.[0-9]{4,7})(\n)([0-9]{4,7})
(?好的,在研究了一个类似的SO问题之后,我发现Atom支持Perl风格的捕获组占位符,所以我所要做的就是像这样扩展我的正则表达式:
negative,10946,N: 10947,P: 59316,7.4346858,52.3209003
145930
24941,N: 54399,P: 24940,7.4308326,52.323004
145943
positive,57656,N: 57658,P: 57655,9.7569868,53.7176063
131516
57694,N: 57695
9.677158,53.6762726
131587
(?<=^.[0-9]{4,7})\n(?=[0-9]{4,7})
(^.[0-9]{4,7})(\n)([0-9]{4,7})
…并将其用作替换字符串:
$1\n\nboth,$3
这仍然是一个比环顾四周更麻烦的语法,但至少它是有效的。好的,在研究了一个类似的SO问题后,我发现Atom支持Perl风格的捕获组占位符,所以我所要做的就是像这样扩展我的正则表达式:
negative,10946,N: 10947,P: 59316,7.4346858,52.3209003
145930
24941,N: 54399,P: 24940,7.4308326,52.323004
145943
positive,57656,N: 57658,P: 57655,9.7569868,53.7176063
131516
57694,N: 57695
9.677158,53.6762726
131587
(?<=^.[0-9]{4,7})\n(?=[0-9]{4,7})
(^.[0-9]{4,7})(\n)([0-9]{4,7})
…并将其用作替换字符串:
$1\n\nboth,$3
它的语法仍然比环顾四周要麻烦得多,但至少它可以工作。:)