Abe*_*cee 14 regex textwrangler replace
试着转身
a: 1, 2, 3
a: a, b, v
b: 5, 6, 7
b: 10, 1543, 1345
b: e, fe, sdf
cd: asdf, asdfas dfasdfa,asdfasdfa,afdsfa sdf
e1: asdfas, dafasd, adsf, asdfasd
e1: 1, 3, 2
e1: 9, 8, 7, 6
Run Code Online (Sandbox Code Playgroud)
成
a: 1, 2, 3
a, b, v
b: 5, 6, 7
10, 1543, 1345
e, fe, sdf
cd: asdf, asdfas dfasdfa,asdfasdfa,afdsfa sdf
e1: asdfas, dafasd, adsf, asdfasd
1, 3, 2
9, 8, 7, 6
Run Code Online (Sandbox Code Playgroud)
因此,线条已排序.如果连续行以相同的字符序列开始,直到/包括某些分隔符(此处为冒号(及其后面的空格)),则只应保留第一个实例 - 应该是所有行的其余部分.从相同的字符序列开始,最多可能有十几(一半)行.输入大约有4,500行......
在TextWrangler中尝试过.
同时搜索模式
^([[:alnum:]]+): (.+)\r((\1:) (.+)\r)*
Run Code Online (Sandbox Code Playgroud)
匹配正确,没有替换
\1:\t\2\r\t\3\r
Run Code Online (Sandbox Code Playgroud)
也不
\1:\t\2\r\t\4\r
Run Code Online (Sandbox Code Playgroud)
让我接近我正在寻找的东西.
搜索模式
^(.+): (.+)\r((?<=\1:) (.+)\r)*
Run Code Online (Sandbox Code Playgroud)
由于不是固定长度的后卫而被拒绝. - 不确定,无论如何,它正朝着正确的方向前进.
看看 如何合并以文本文件中的相同项目开头的行 我想知道,是否存在优雅(例如:一个搜索模式,一个替换,一次运行)解决方案.
另一方面,我可能无法提出正确的搜索网络问题.如果你知道的更好,请指出我正确的方向.
保持其余行对齐当然是糖的问题......
感谢您的时间.
作为可变长度lookbehind的解决方法:PCRE允许可变长度的替代方案
在外观方面,PCRE并不完全兼容Perl.虽然Perl要求lookbehind内部的替代品具有相同的长度,但PCRE允许可变长度的替代品.
需要为每个最大前缀长度字符添加管道的想法:
(?<=(\w\w:)|(\w:)) (.*\n?)\1?\2?
Run Code Online (Sandbox Code Playgroud)
并替换为\t\3.请参阅regex101上的测试.捕捉后视内部对于不消耗/不跳过匹配很重要.相同的模式变量,例如.NET:(?<=(\w+:)) (.*\n?)\1?
(?<=(\w\w:)|(\w:))lookbehind中的前两个捕获组用于捕获前缀:两个或一个单词字符后跟冒号.\w是一个简写为[A-Za-z0-9_]
(.*\n?)第三个捕获组,用于前缀之间的内容.获取最后一场比赛的可选换行符.
\1?\2?如果在以下行中,将可选地替换相同的前缀.只能设置其中一个:\1xor \2.冒号后的空格也总是匹配 - 无论前缀如何.
摘要:每个前缀后的空格将转换为制表符.仅当匹配当前时,后续行的前缀.
要匹配和替换多个空格和制表符:(?<=(\ w\w:)|(\ w:))[\ t] +(.*\n?)\ 1?\ 2?