我有几个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
有想法吗?
答案 0 :(得分:1)
AFAIK(自PDI-8.0起),Regex Evaluation
步骤不支持正则表达式' g '修饰符,您的正则表达式模式必须覆盖所有文本,以便能够比赛。
例如:以下模式与 Regex评估步骤中的任何内容都不匹配:
:([0-9a-f]+):\s+([^:]+)
但是如果我将.*
放在此模式前面并选择“ 启用dotall模式”:
.*:([0-9a-f]+):\s+([^:]+)
它将匹配最后的提交(sha1 +文件名)。您可以尝试将.*
移至
原始模式将使您第一次提交。所以如果你想找
带有 g 修饰符的提交(sha1 +文件名)的完整列表,此步骤是
可能不是您的解决方案。
由于字段基本上由冒号':'和换行符分隔,因此您可以尝试以下方法:
使用将字段拆分为行步骤,Delimiter =':'并在输出中包含rownum,此rownum可用于过滤偶数为sha1且奇数为文件名的行< / p>
使用分析查询步骤创建LEAD = 1的新字段,因此现在您可以在同一行中获取sha1和文件名
使用 Calculator 和 Fileter 步骤来计算rownum / 2的余数,并仅保留行数为奇数的行
再次使用将字段拆分为行,以使用\ n(定界符为正则表达式)将filenames
拆分为filename
。您可能要过滤掉EMPTY文件名,因为分隔符仅支持一个char