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

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

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

    正则部分详解

    [/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)。

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

    第二个正则表达式:([\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]*?能抓取的数据的很多,但是要注意的一个坑就是()前后的固定、定位字符,如果存在? [ ] 等特殊字符时,需在字符前面加反斜杠字符 (\)转义,详细特殊字符见此处

    19
    5
    19
    等 19 人为本文章充电