FME转换器 正则字符查找(StringSearcher)


前言:写了StringReplacer转换器后,说要介绍StringSearcher转换器的,如今鸽了好久。终于今天我来写下这篇介绍——StringSearcher。

StringSearcher

简介:将输入的字符串进行正则匹配。如果输入的字符串内容匹配正则表达式,该字符串会从Matched端口输出,并且匹配的字符内容会存储在指定的“Matched Result Attribute”属性列中(可选将多个匹配结果以列表形式存储在指定的“Matched Parts Attribute”属性列中)。其他未匹配的,从NotMatched端口输出。

一、参数介绍

1.1 基础设置

  • Search In
    输入用于正则匹配的字符串,通常选择输入的某个属性字段
  • Contains Regular Expression
    指定匹配正则表达式,用于检索输入的字符内容。
  • Case Sensitive
    设置是否区分大小写,适用于英文,中文无效。
  • Matched Result Attribute
    用于存储匹配结果的字段名称,默认名称为_first_match。若设置的名称与现有字段名称重复,会将其覆盖。

1.2 高级设置

  • 全部匹配结果列表名称
    该可选项设置后可以将所有的匹配结果存储在指定的列表中。不设置的情况下只会在存储匹配的第一个结果。
  • 子匹配结果列表名称
    该可选项设置后可以将所有的子表达式匹配结果存储在指定的列表中。不设置的情况下不存储子表达式的匹配结果。子表达式的匹配结果即为用括号“( )”包含起来的子表达式匹配的内容。

存储在列表中的属性内容通过2种方式获取:

  1. 通常属性获取器中选择列表属性后,设置下标序号获取对应的属性值。
  2. 使用ListExploder转换器将列表中所有的属性值暴露处来。

二、正则表达式介绍

2.1 基础用法

正则表达式是针对字符串处理的一种逻辑公式,既用事先定义好的特定字符及组合,形成一个“特定字符串判断逻辑”。这个“特定字符串判断逻辑”可以用来对字符串进行逻辑过滤。

字符 正则表达式字符介绍 例子
| 分支判断符:表达逻辑判断上的“或”,计算逻辑上的“or”关系。 A|B
* 字符限定符:表达有任意个指定字符,包含0个 A * ; * 等同于{0,}
+ 字符限定符:表达有一个以上指定字符,包含1个 A+ ; +等同于{1,}
? 字符限定符:表达有0个或者1个指定字符 A? ; ?等同于{0,1}
{ } 字符限定符:表达指定字符的允许出现次数 A{1,3} 表示A可以出现1,2,3次; A{3,} 标识A可以出现3次以上,包含3次
. 字符模式符:代表任意的单个字符 .* 表示任意字符串
\d 字符模式符:代表任意的单个数字 \d+ 则表示任意一串数字; \d{6} 则表示一串6位数
^ 位置指定符:代表开头的位置 ^广州市 表示出现在开头的“广州市”字符
$ 位置指定符:代表结尾的位置 北京路$ 表示出现在末尾的“北京路”字符; ^中国$ 则表示完全匹配,只有“中国”字符
[ ] 集合限定符:用于包含字符集合 [a-zA-Z] 表示任意英文字符;[一-龥] 表示任意汉字字符
( ) 集合限定符:用于包含一个子表达式 ^(\d{3})\d{8}$ 匹配11位数字并将前3位数字放入子匹配结果

2.2 前瞻后顾用法

语法 效果 例子
str1(?=str2) 查找str2前面的str1 白(?=萝卜) :提取“白萝卜”的“白”
(?<=str2)str1 查找str2后面的str1 (?<=白)萝卜 :提取“白萝卜”的“萝卜”
str1(?!str2) 查找后面不是str2的str1 黑(?!萝卜) :提取非“黑萝卜”的“黑”
(?<!str2)str1 查找前面不是str2的str1 (?<!黑)萝卜 :提取非“黑萝卜”的“萝卜”

三、总结

StringSearcher转换器的使用效果主要看对正则表达式的理解程度和熟练程度,所以如果想提高StringSearcher转换器的使用效率则需要好好学习正则表达式的相关知识。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章