在线用 Python 正则查找文本


前段时间做了一个使用 Python 正则提取文本的工具服务: https://texttoolkit.com/re.findall ,用于解决日常一些繁琐的查找文本的需求。

/img/2021-07-11-re.findall.png
工具主界面

场景 1

日常开发工作中你可能也需要像我一样,用各种内部管理系统,查看监控、日志、按机器 IP 过滤列表等等(我自嘲这是“面向浏览器开发”)。

但是内部系统一般用户体验都比较差,经常需要人肉从界面 A 抠出来一堆 IP 列表到页面 B 操作。一两个 IP 还好,一旦 IP 到了 5 个以上的时候,这种操作就会把自己搞得很郁闷,因为这就是个反复复制粘贴机器,没有什么技术含量。

为了愉悦自己,我也尝试过一些简便的办法:

  1. 按列提取:对于 table 型的数据,从浏览器复制粘贴到 excel 中,再把对应列提取出来
  2. 无法按列提取:用 shell 包装一下 grep/sed/awk 来完成

可行是可行,但挡不住内部系统各种 UI 不统一的问题,比如多 IP 分隔符,有时候格式是 IP1|IP2 , 有的时候又是 IP1,IP2 (颇有一种“一群大雁飞过,一会儿排成一个一字,一会儿又排成一个人字”之感)。

这就使得上面的方法不太灵活,每次用的时候都需要稍微调整一番,而且每个 CLI 工具的正则语法可能还会有一点点差异,还以一次用对。

于是我就想,是否有别的更好的方法呢?

有天想到可以利用正则来很好的完成这个任务,而且正则还有一个 bonus,那就是对于数据没有“格式”要求,不像 awk 那样针对特定的列,只要满足 pattern 即可;另外对于 join 的符号,也可以在界面上很方便地更改。

场景 2

举一个开发例子,出于某种原因,你现在需要提取 protobuf 定义的所有字段名字,那也可以用这个服务来完成。

比如定义如下:

message Person {
  required string Name = 1;
  required int32 Id = 2;
  optional string Email = 3;
}

那么用此服务也很简单,只要用正则 (\w+) = 即可把它们都抓出来。

场景 3

某天你上网看到一篇好文章,里面包含了大量精美的图片,你想把图片 url 都找出来,然后用 wget 批量下载, 在本地保存一份,那么这个服务也可以帮一点忙。

只需要简单两步即可搞定:

  1. 右键查看网页源码,粘贴到文本框中
  2. 写一个提取 img src 的正则: <img.*?src="([^"]+)"

也可以看看

comments powered by Disqus