「正则表达式」在抓取文本中指定字符串时非常有用,你可以理解为高级版通配符,应用的地方很多。网上 优秀的正则学习资料 也已经很多了,非常值得学习。这篇文章主要是写给没有接触过「正则表达式」,想利用Workflow完成某些处理,但又比较懒的朋友。因为我只讲一个,我个人觉得最有用的一个表达式。
在银行买了一些美元基金,通过登陆App或者网站看基金涨跌情况挺麻烦。所以可以利用workflow一键查看自己的基金涨跌情况。
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
等 19 人为本文章充电