使用grep按斜杠数量过滤含特定格式名称的文本行
按斜杠数量筛选行的正则方案
需求分析
你需要筛选出括号内的病毒名称部分恰好包含3个斜杠的行(目标行A/Wenzhou/mamamam/2013(H9N2)有3个/,其他行有4个)。
正则表达式写法
不需要转义/(除非你用/作为正则的分隔符,比如JavaScript的正则字面量场景),直接使用以下正则即可匹配目标行:
^Influenza A virus \(A(?:/[^/]+){3}\([^)]+\)\)$
正则解释
^和$:匹配行的开头和结尾,确保整行符合格式Influenza A virus \(:匹配固定前缀,\(转义括号因为它是正则特殊字符A(?:/[^/]+){3}:匹配A开头,后面跟着恰好3次/+非斜杠字符的组合(对应3个斜杠)\([^)]+\):匹配括号内的亚型部分(比如(H9N2))\):匹配行尾的闭合括号
工具使用示例
1. 命令行grep
grep '^Influenza A virus (A/[^/]+/[^/]+/[^/]+\([^)]+\))$' your_input_file.txt
2. Python代码
import re input_lines = [ "Influenza A virus (A/chicken/Wenzhou/642/2013(H9N2))", "Influenza A virus (A/chicken/Wenzhou/643/2013(H9N2))", "Influenza A virus (A/chicken/Wenzhou/644/2013(H9N2))", "Influenza A virus (A/Wenzhou/mamamam/2013(H9N2))" ] match_pattern = re.compile(r'^Influenza A virus \(A(?:/[^/]+){3}\([^)]+\)\)$') for line in input_lines: if match_pattern.match(line): print(line)
补充说明
如果是在必须用/作为正则分隔符的环境(比如JavaScript),才需要把/转义成\/,正则会变成:
/^Influenza A virus \(A(?:\/[^\/]+){3}\([^)]+\)\)$/
内容的提问来源于stack exchange,提问作者genferreri
相关产品推荐
相关产品推荐

