Jupyter Notebook执行egrep命令含{}正则量词时无返回结果问题
问题原因
- Jupyter 中单行
!开头的 shell 执行命令内置了 Python 变量插值逻辑,所有被{}包裹的内容会被优先识别为 Python 变量占位符,Jupyter 会尝试替换为对应变量值后再传给 shell 执行,因此你正则中的{1,2}不会原样传递给 egrep,导致正则匹配失效,无输出结果。 - 手动添加反斜杠转义
\{1,2\}无效的原因是转义符会先被 shell 层解析消耗,最终传递给 egrep 的正则仍然不符合预期,无法匹配到对应内容。
解决方案
任选以下任意一种方案即可解决问题:
- 将包含花括号的正则部分用单引号包裹,规避 Jupyter 的插值逻辑:
!echo "one two tree"|egrep --color 't[w,r](o|e){1,2}'
- 使用
%%bash单元格魔术命令代替单行!执行,该模式下 Jupyter 不会对内容做变量插值,会直接传递给 bash 执行:
%%bash echo "one two tree"|egrep --color "t[w,r](o|e){1,2}"
- 先将正则定义为 Python 字符串变量,再通过 Jupyter 原生的插值逻辑传入命令:
pattern = r"t[w,r](o|e){1,2}" !echo "one two tree"|egrep --color "{pattern}"
内容的提问来源于stack exchange,提问作者Shlomi Lachmish
相关产品推荐
相关产品推荐

