RegEx 在 Pentaho RegEx Evaluation Step 除外的任何地方都有效
RegEx works everywhere except in Pentaho RegEx Evaluation Step
我有几个 RegEx 可以在在线正则表达式网站上使用,但不能在 Pentaho 中使用。你能帮忙吗?
这是字符串:
:6585d0f0ba88767ac3b590f719596d864d73e9c1:
harmonicbalance/src/harmonicbalance/HarmonicBalanceFlowModel.cpp
harmonicbalance/src/harmonicbalance/HbFlutterModel.cpp
:8302994b565553c83a048b8905ae597349d99627:
emp/src/emp/PhasePairSingleParticleReynoldsNumber.h
emp/src/emp/TomiyamaDragCoefficientMethod.cpp
:9da194f17ec08bb20ad1be8df68b78ca137ab18a:
combustion/src/combustion/ReactingSpeciesTransportBasedModel.cpp
combustion/src/complexchemistry/TurbulentFlameClosure.cpp
:6a59f0be1e347a65e525e58742bb304639ea9bc4:
meshing/src/meshing/SurfaceMeshManipulation.cpp
physics/src/discretization/FvIndirectRegionInterfaceManager.cpp
physics/src/discretization/FvIndirectRegionInterfaceManager.h
physics/src/discretization/FvRepresentation.cpp
physics/src/discretization/FvRepresentation.h
:64b7f6d36b11b6cd94c20cad53463b7deef8c85a:
resourceclient/src/resourceclient/ResourcePool.cpp
resourceclient/src/resourceclient/ResourcePool.h
resourceclient/src/resourceclient/RestClient.cpp
resourceclient/src/resourceclient/RestClient.h
resourceclient/src/resourceclient/test/ResourcePoolTest.cpp
我想捕获两个组。第一组将提取所有提交的 SHA1,另一组将提取文件名。
以下是我试过的表达方式:
(?:^:([A-Za-z0-9]+):|(?!^)\G)\n+([A-Za-z/.-]+)
https://regex101.com/r/3IBkPz/1
^:(\w+):\s+((?:\s*(?!:)[^\s]+)+)
https://regex101.com/r/oIoDvM/1
想法?
AFAIK(自 PDI-8.0 起),Regex Evaluation
步骤不支持正则表达式 'g' 修饰符,您的正则表达式模式必须覆盖所有文本能够配对。
例如:以下模式将不匹配 正则表达式评估 步骤中的任何内容:
:([0-9a-f]+):\s+([^:]+)
但是如果我将 .*
添加到此模式并选择“启用 dotall 模式”:
.*:([0-9a-f]+):\s+([^:]+)
它将匹配最后一次提交(sha1 + 文件名)。您可以尝试将 .*
移动到
将使您第一次提交的原始模式。所以如果你想找回
使用 g 修饰符的完整提交列表(sha1 + 文件名),这一步是
可能不是适合您的解决方案。
由于字段基本上由冒号':'和换行分隔,您可以尝试以下方法:
使用Split field to rows步骤,Delimiter=':' 并在输出中包含rownum,此rownum可用于过滤偶数行sha1 和奇数是文件名
使用Analytic Query步骤创建一个LEAD = 1的新字段,所以现在你可以在同一行中获取sha1和文件名
使用 Calculator 和 Fileter 步骤计算 rownum/2 的余数并只保留行rownum
的奇数
再次使用Split fields to rows将filenames
拆分为filename
using "\n"(Delimiter is a Regular Expression ).你可能想过滤掉 EMPTY 文件名,因为分隔符只支持一个 char
我有几个 RegEx 可以在在线正则表达式网站上使用,但不能在 Pentaho 中使用。你能帮忙吗?
这是字符串:
:6585d0f0ba88767ac3b590f719596d864d73e9c1:
harmonicbalance/src/harmonicbalance/HarmonicBalanceFlowModel.cpp
harmonicbalance/src/harmonicbalance/HbFlutterModel.cpp
:8302994b565553c83a048b8905ae597349d99627:
emp/src/emp/PhasePairSingleParticleReynoldsNumber.h
emp/src/emp/TomiyamaDragCoefficientMethod.cpp
:9da194f17ec08bb20ad1be8df68b78ca137ab18a:
combustion/src/combustion/ReactingSpeciesTransportBasedModel.cpp
combustion/src/complexchemistry/TurbulentFlameClosure.cpp
:6a59f0be1e347a65e525e58742bb304639ea9bc4:
meshing/src/meshing/SurfaceMeshManipulation.cpp
physics/src/discretization/FvIndirectRegionInterfaceManager.cpp
physics/src/discretization/FvIndirectRegionInterfaceManager.h
physics/src/discretization/FvRepresentation.cpp
physics/src/discretization/FvRepresentation.h
:64b7f6d36b11b6cd94c20cad53463b7deef8c85a:
resourceclient/src/resourceclient/ResourcePool.cpp
resourceclient/src/resourceclient/ResourcePool.h
resourceclient/src/resourceclient/RestClient.cpp
resourceclient/src/resourceclient/RestClient.h
resourceclient/src/resourceclient/test/ResourcePoolTest.cpp
我想捕获两个组。第一组将提取所有提交的 SHA1,另一组将提取文件名。
以下是我试过的表达方式:
(?:^:([A-Za-z0-9]+):|(?!^)\G)\n+([A-Za-z/.-]+)
https://regex101.com/r/3IBkPz/1
^:(\w+):\s+((?:\s*(?!:)[^\s]+)+)
https://regex101.com/r/oIoDvM/1
想法?
AFAIK(自 PDI-8.0 起),Regex Evaluation
步骤不支持正则表达式 'g' 修饰符,您的正则表达式模式必须覆盖所有文本能够配对。
例如:以下模式将不匹配 正则表达式评估 步骤中的任何内容:
:([0-9a-f]+):\s+([^:]+)
但是如果我将 .*
添加到此模式并选择“启用 dotall 模式”:
.*:([0-9a-f]+):\s+([^:]+)
它将匹配最后一次提交(sha1 + 文件名)。您可以尝试将 .*
移动到
将使您第一次提交的原始模式。所以如果你想找回
使用 g 修饰符的完整提交列表(sha1 + 文件名),这一步是
可能不是适合您的解决方案。
由于字段基本上由冒号':'和换行分隔,您可以尝试以下方法:
使用Split field to rows步骤,Delimiter=':' 并在输出中包含rownum,此rownum可用于过滤偶数行sha1 和奇数是文件名
使用Analytic Query步骤创建一个LEAD = 1的新字段,所以现在你可以在同一行中获取sha1和文件名
使用 Calculator 和 Fileter 步骤计算 rownum/2 的余数并只保留行rownum
的奇数
再次使用Split fields to rows将
filenames
拆分为filename
using "\n"(Delimiter is a Regular Expression ).你可能想过滤掉 EMPTY 文件名,因为分隔符只支持一个char