在使用 Sublime Text 3 编辑器打开的 txt 文件中使用正则表达式查找重复项
Find duplicate using regex in a txt file opened with Sublime Text 3 editor
我有以下 table,写在一个 txt 文件中。
+----------------+---------------+------------+
| Reference Date | Instrument ID | Entity ID |
+----------------+---------------+------------+
| 2019-06-28 | 4251675720 | 1000183742 |
+----------------+---------------+------------+
| 2019-06-28 | 4251675720 | 1000183742 |
+----------------+---------------+------------+
| 2019-06-28 | 2113750655 | 100065856 |
+----------------+---------------+------------+
| 2019-06-28 | 3512075270 | 1002923999 |
+----------------+---------------+------------+
| 2019-06-28 | 4251998103 | 1003890261 |
+----------------+---------------+------------+
| 2019-06-28 | 4239113350 | 1004043945 |
+----------------+---------------+------------+
| 2019-06-28 | 8569030255 | 1004043945 |
+----------------+---------------+------------+
| 2019-06-28 | 6692802619 | 1004584989 |
+----------------+---------------+------------+
| 2019-06-28 | 6751615521 | 1005048991 |
+----------------+---------------+------------+
| 2019-06-28 | 1338818134 | 1005076529 |
+----------------+---------------+------------+
| 2019-06-28 | 1903780287 | 1005519781 |
+----------------+---------------+------------+
| 2019-06-28 | 3023132803 | 1005535434 |
+----------------+---------------+------------+
| 2019-06-28 | 3075990149 | 1006443568 |
+----------------+---------------+------------+
| 2019-06-28 | 1821112520 | 1007165898 |
+----------------+---------------+------------+
| 2019-06-28 | 4249904989 | 100753094 |
+----------------+---------------+------------+
| 2019-06-28 | 4230960972 | 1009300504 |
+----------------+---------------+------------+
| 2019-06-28 | 2254190165 | 1010611747 |
+----------------+---------------+------------+
文件如下所示:
txt 文件是从 Sublime Text 3(文件编辑器)打开的。
我的问题:我不想重复,我想因为 Sublime Text 支持 Find/Replace 正则表达式功能来查找那些重复项并删除它们手。
具体来说,我想在仪器 ID、实体 ID 列中找到重复项。例如,如果您检查前两行都具有相同的对(仪器 ID、实体 ID)。使用正则表达式我想找到具有相同对的其余行并手动删除第二行。
请记住,在我的 txt 文件中,语法是:1000183742 1006443568
(列之间有 6 个空格 + 1 个制表符)。因此,对于正则表达式,我正在寻找与
相同的一对
d{10}\s{6}\t{1}\d{10}
-> 10 位数字,后跟 6 个空格,后跟 1 个制表符,后跟 10 位数字
您可以捕获 2 个捕获组中的数字并断言它们出现在右侧。
\b(\d{10}) {6}\t(\d{10})\b(?=[\s\S]*\b {6}\t)\b
\b(\d{10})
字界,截取第1组10位
{6}\t
匹配 6 个空格和一个制表符
(\d{10})\b
在第2组和字边界中捕获10个数字
(?=
正向前瞻,断言右边的内容包含
[\s\S]*
匹配任何字符 0+ 次
\b {6}\t)\b
使用 backreference 匹配第 1 组和第 2 组中的完全匹配值
)
关闭前瞻
您也可以切换它并使用负先行获取右侧没有重复值的匹配项。请注意,我使用了 \d{9,10}
,因为并非所有值都是 10 位
\b\d{4}-\d{2}-\d{2}[ \t]+\b(\d{9,10}) {6}\t(\d{9,10})\b(?![\s\S]*\b
我有以下 table,写在一个 txt 文件中。
+----------------+---------------+------------+
| Reference Date | Instrument ID | Entity ID |
+----------------+---------------+------------+
| 2019-06-28 | 4251675720 | 1000183742 |
+----------------+---------------+------------+
| 2019-06-28 | 4251675720 | 1000183742 |
+----------------+---------------+------------+
| 2019-06-28 | 2113750655 | 100065856 |
+----------------+---------------+------------+
| 2019-06-28 | 3512075270 | 1002923999 |
+----------------+---------------+------------+
| 2019-06-28 | 4251998103 | 1003890261 |
+----------------+---------------+------------+
| 2019-06-28 | 4239113350 | 1004043945 |
+----------------+---------------+------------+
| 2019-06-28 | 8569030255 | 1004043945 |
+----------------+---------------+------------+
| 2019-06-28 | 6692802619 | 1004584989 |
+----------------+---------------+------------+
| 2019-06-28 | 6751615521 | 1005048991 |
+----------------+---------------+------------+
| 2019-06-28 | 1338818134 | 1005076529 |
+----------------+---------------+------------+
| 2019-06-28 | 1903780287 | 1005519781 |
+----------------+---------------+------------+
| 2019-06-28 | 3023132803 | 1005535434 |
+----------------+---------------+------------+
| 2019-06-28 | 3075990149 | 1006443568 |
+----------------+---------------+------------+
| 2019-06-28 | 1821112520 | 1007165898 |
+----------------+---------------+------------+
| 2019-06-28 | 4249904989 | 100753094 |
+----------------+---------------+------------+
| 2019-06-28 | 4230960972 | 1009300504 |
+----------------+---------------+------------+
| 2019-06-28 | 2254190165 | 1010611747 |
+----------------+---------------+------------+
文件如下所示:
txt 文件是从 Sublime Text 3(文件编辑器)打开的。
我的问题:我不想重复,我想因为 Sublime Text 支持 Find/Replace 正则表达式功能来查找那些重复项并删除它们手。 具体来说,我想在仪器 ID、实体 ID 列中找到重复项。例如,如果您检查前两行都具有相同的对(仪器 ID、实体 ID)。使用正则表达式我想找到具有相同对的其余行并手动删除第二行。
请记住,在我的 txt 文件中,语法是:1000183742 1006443568
(列之间有 6 个空格 + 1 个制表符)。因此,对于正则表达式,我正在寻找与
d{10}\s{6}\t{1}\d{10}
-> 10 位数字,后跟 6 个空格,后跟 1 个制表符,后跟 10 位数字
您可以捕获 2 个捕获组中的数字并断言它们出现在右侧。
\b(\d{10}) {6}\t(\d{10})\b(?=[\s\S]*\b {6}\t)\b
\b(\d{10})
字界,截取第1组10位{6}\t
匹配 6 个空格和一个制表符(\d{10})\b
在第2组和字边界中捕获10个数字(?=
正向前瞻,断言右边的内容包含[\s\S]*
匹配任何字符 0+ 次
\b {6}\t)\b
使用 backreference 匹配第 1 组和第 2 组中的完全匹配值
)
关闭前瞻
您也可以切换它并使用负先行获取右侧没有重复值的匹配项。请注意,我使用了 \d{9,10}
,因为并非所有值都是 10 位
\b\d{4}-\d{2}-\d{2}[ \t]+\b(\d{9,10}) {6}\t(\d{9,10})\b(?![\s\S]*\b