从字符串中删除空格 - 正则表达式



>我有一个csv文件,其中包含字符串字段,其中包含由空格(千的分隔符(分隔的数字,例如"1 025 000"而不是"1025000"。

我想删除这些空格,仅适用于带有数字的字段,这样我就可以使用 jolt 转换转换为双倍以在输出时获得 json 文件,我正在使用正则表达式在带有 replaceText 处理器的 apache nifi 上执行此操作。

这是我的CSV的一个例子:

Client1;Client2;Client3;price1;price2;price3
john smith;john2 smith2;john3 smith3;1 145;125;129 009

我正在使用的这个表达式没有完成这项工作:(s?=(d{3},?)+(?:.d{1,3})?")

提前感谢!

虽然您可以通过NiFi执行此操作,但我建议您尝试更改源,并可能更正数字的格式和写入方式。

无论如何,我立即想到的一种方法是利用ExecuteScript处理器来处理空格部分。

假设您拥有如下所示的 CSV:

name,val
item1, 1 345 000
item2, 2 432

您可以使用SplitRecord处理器将 CSV 转换为 JSON 并将其拆分为 1 条记录。将此输出馈送到ExecuteScript.

您可以使用以下Groovy代码来读取流文件内容并替换所有空格

import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
import groovy.json.JsonSlurper
flowFile = session.get()
if(!flowFile)return
def jsonSlurper = new JsonSlurper()
def text = ''
flowFile = session.write(flowFile, {inputStream, outputStream ->
input = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
inputJson = jsonSlurper.parseText(input)
inputJson.val = inputJson.val.replaceAll("\s", "")
outputStream.write(inputJson.toString().getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)

根据您的用例要求,将ExecuteScriptsuccess关系连接到处理器。无论如何,所提供输入的输出将如下所示:

{
"name" : "item1",
"val" : "1345000"
}
{
"name" : "item2",
"val" : "2432"
}

最新更新