「正则表达式」在抓取文本中指定字符串时非常有用,你可以理解为高级版通配符,应用的地方很多。网上优秀的正则学习资料也已经很多了,非常值得学习。这篇文章主要是写给没有接触过「正则表达式」,想利用Workflow完成某些处理,但又比较懒的朋友。因为我只讲一个,我个人觉得最有用的一个表达式。

示范问题

在银行买了一些美元基金,通过登陆App或者网站看基金涨跌情况挺麻烦。所以可以利用workflow一键查看自己的基金涨跌情况。

解决思路

  1. 正则匹配,提取 基金当前美金价格
  2. 正则匹配,提取 银行当前美金汇率;(当然也可调用相关开放的API)
  3. 计算基金当前净值;

Workflow流程图

1.png2.png

正则部分详解

  [/s/S]*?

这是我最常用的一个表达式,非贪婪匹配任意字符串(包括换行符),将这个表达式放在()内,()的前后是定位用的、固定不变的字段。()是用来在「Get Group from Matched Text」中仅输出匹配的变动字段。

\s 空白符
\S 非空白符
[\s\S]任意字符
[\s\S]* 0个到任意多个字符 [\s\S]*? 0个到任意多个字符(非贪婪模式,即最短匹配情况)

更多正则语法可以搜索了解,再次推荐值得一学,半小时即可。

抓取美金汇率

在流程中可以看到抓取美金汇率的时候,用了两次正则匹配,而抓取基金价格只用了一次。因为在美金汇率的HTML代码中,有重复的标签,所以先用一次缩小范围并定位到第10组数据,第二次再提取美金的汇率价格:

第一个「正则表达式」:([\s\S]*?)代表div内的HTML代码

<div class="cT-divTableRow">([\s\S]*?)</div>

以上表达式会匹配到所有币种的表格HTML,共12组。利用「Get  Item from List」输出第10组(其实是11,Index值为10)。

IMG_4856.PNG

再继续对上面得到的文本继续正则匹配抓取,继续用上面那个公式匹配,改掉小括号前后的字段

第二个正则表达式:([\s\S]*?)代表汇率数值

<span class="cT-divTableDateColumn" style="width:90px;">([\s\S]*?)</span>

这里也会匹配到两组字符串(买入价、卖出价):

先用「Get Group from Matched Text」仅输出数值部分,否则会输出带HTML标签的整个文本;

再用「Get  Item from List」获取第一个数字(买入价);

抓取基金价格

因为前后的HTML标签唯一,这里只需要一次正则匹配即可。

([\s\S]*?)代表当前净值数值

<span id="MainContent_QuickTakeMainContent_QuickTakeForm_NAVText">([\s\S]*?)</span>

依然用「Get Group from Matched Text」仅输出匹配的数值部分;

其他

  [/s/S]*?能抓取的数据的很多,但是要注意的一个坑就是()前后的固定、定位字符,如果存在? [ ] 等特殊字符时,需在字符前面加反斜杠字符 (\)转义,详细特殊字符见此处