span8
span4
你好,
我使用的是FME 2017.0 x64,输入的数据是来自服务器的PostGIS数据
因此,表'other_tags中有一列包含所显示的字符串。我希望=>左边的值是属性名,而=>右边的值是该属性的值。这两列用逗号(,)隔开。
关键是属性名regex.jpg都不是按一定的顺序排列的,所以我觉得创建列表有点困难。
此外,列中的值可以是多个的,就像表面可以是铺平的,未铺平的,沥青,草地和更多,因为工作台必须用于多个国家的字符串也不能被定义。
是否有一些简单可行的方法来提取可以使workbench更短、更容易的值?
我尝试字符串搜索与regex-表面 “=>”。*“$但有些地方出了问题。
谢谢。
如果你试图使用。*(任何单词)搜索,那么你也在搜索逗号等。
假设字符串只包含字母数字字符、空格、问号和分号,那么您可以在(例如)stringsearcher中使用以下regexp
”([a-zA-Z: \ \ d \ ?] +)“= >”([a-zA-Z: \ \ d \ ?] +)”
嗨@hellblazer或者,这里可以使用jsonflater,将表达式设置为JSON文档参数。
{@ReplaceString (@ value (other_tags) = >:)}
如果需要,您可以使用attribute脚注暴露必需的属性名。
见附件:jsonflattener-demo.fmwt(FME 2017.0.1.1)
你当然可以用变形金刚来完成同样的事情。但是这里有一个基于PythonCaller的解决方案,它将为“other_tags”中列出的每个标签创建一个属性:
def SplitTags(特性):tags_str = feature.getAttribute (other_tags)如果tags_str: #标签分割成键/值对的dict标签= dict ([x.split (x ' = > ') tags_str.split(" "))) #修剪多余的空格标记= {k.strip (): v.strip () k, v tags.iteritems()} #修剪双引号标记= {k.strip ('“”): v.strip () k、v tags.iteritems ()} k, v tags.iteritems():功能。setAttribute (k、v)
示例输入:
691年“int_ref”= >“E”,“名字:ka”= >“卡”,“名字:俄文”= >“俄罗斯”,“表面”= >“沥青”
示例输出:
' int_ref'有值' E 691' ' name:ka'有值' ka' ' name:ru'有值' ru' ' surface'有值'沥青'
请注意,有可能是一些边缘情况下,你会得到意想不到的效果,特别是如果一个标签里面的值,而不是作为分隔符出现字符串“=>”或逗号。如果是这样的情况下,需要更先进的分析机制。
能否请您提供这将是提供解决方案帮助的一些样本输入数据。
如果单个属性包含需要分离成新的属性多个值,首先你可以使用AttributeSplitter建立一个列表。
但是,对于你的正则表达式的问题的答复,您可以通过在“other_tags”的值到两个新的属性(在这个例子中创建了“att_name”和“att_value”)之前=>使用两个StringReplacers提取一部分作为“att_name'和后部分=>为‘att_value’。(请参阅所附的工作区)
为了提取“att_name”你可以使用正则表达式^值。*>
要为“att_value”获取价值正则表达式是=>。* $
然后,你可以使用“att_name”和“att_value”建立新的属性。
注意:FME不直接支持使用其他属性的值到工作流程中使用它们创建新的属性。亚搏在线但是,可以用这种方式产生的属性和使用SchemaSetter并与如所附示例工作区描绘“架构从架构功能”设置作家动态它们写入到最终输出。
问候,
Priyantha Pallegama
©2019安全亚搏在线软件公司法律