一、任务
正则表达式在各种语言中都在使用,在FME中,其实后台就是Python,所以在FME使用正则表达式遵循Python语言的约定。
二、向前看向后看(前瞻后顾)的用法示例
语法 | 效果 | 示例 |
---|---|---|
str1(?=str2) | 查找str2前面的str1 | 白(?=萝卜) :提取“白萝卜”的“白” |
(?<=str2)str1 | 查找str2后面的str1 | (?<=白)萝卜 :提取“白萝卜”的“萝卜” |
str1(?!str2) | 查找后面不是str2的str1 | 黑(?!萝卜) :提取非“黑萝卜”的“黑” |
(?<!str2)str1 | 查找前面不是str2的str1 | (?<!黑)萝卜 :提取非“黑萝卜”的“萝卜” |
三、实际使用场景
3.1 提取经度的度,用到向前看(前瞻)直接指定获取°之前的数字即可,经度的度都是整数,此处用\d+即可。
3.2 提取经度的分,用到向前看+向后看(前瞻后顾),经度的分都是整数,此处用\d+即可。
3.3 提取经度的秒,同样也用到向前看+向后看(前瞻后顾),因为秒会有小数点,此时不再能用\d+,而是用.*代表任意个数的任意字符(见上图),但是可能会有非法字符在里面,例如空格。严肃的写法建议是[\d.]{1,} 代表数字或点出现1到无限次,就不会匹配到空格等非法字符(见下图)
四、小结
正则表达式对于匹配同样的字符可能有很多种方法,选择一种自己喜欢、可读性强,方便将来维护。正则表达式非常强大,语法却不是那么复杂,值得投入时间和精力学习一下。另外FME的正则表达式编辑验证器可能会匹配不到结果,但是实际是匹配上的,以运行结果为准,不要太过于相信自带的正则表达式编辑验证器。