如何用REGEX提取CSV中首条含apple或salad的行并忽略后续匹配行
提取CSV中首次出现apple/salad的行
文本编辑器处理(支持正则替换)
- 打开CSV文件,切换到正则替换模式(不同编辑器操作略有差异:VS Code按Ctrl+H后勾选「正则表达式」;Notepad++在替换窗口勾选「正则表达式」)
- 使用以下规则执行替换:
- 查找内容:
^(?!.*(apple|salad)).*$\n|^(.*apple.*)$\n(?:.*apple.*$\n)*|^(.*salad.*)$\n(?:.*salad.*$\n)* - 替换内容:
$1$2
- 查找内容:
- 替换完成后,文件将仅保留第一行含
apple的记录和第一行含salad的记录。
正则逻辑说明
^(?!.*(apple|salad)).*$\n:匹配并删除所有不含apple或salad的行^(.*apple.*)$\n(?:.*apple.*$\n)*:锁定第一个含apple的行,删除后续所有含apple的行^(.*salad.*)$\n(?:.*salad.*$\n)*:同理处理salad相关行,仅保留首次出现的那一行
OpenOffice Calc处理
- 将CSV文件导入OpenOffice Calc,确保每行数据对应表格的一行
- 新增辅助列(比如B列),在B1单元格输入公式:
=IF(OR(ISNUMBER(SEARCH("apple",A1)),ISNUMBER(SEARCH("salad",A1))),IF(OR(COUNTIF($B$1:B1,"apple")=0,COUNTIF($B$1:B1,"salad")=0),IF(ISNUMBER(SEARCH("apple",A1)),"apple","salad"),""),"") - 按住B1单元格右下角的填充柄,下拉填充到所有行
- 选中B列,点击「数据」→「筛选」→「自动筛选」,筛选出B列不为空的行,即为需要保留的目标记录
内容的提问来源于stack exchange,提问作者kane3
相关产品推荐
相关产品推荐

