我收到以下文字:
instance=hostname1, topic="AB_CD_EF_12345_ZY_XW_001_000001"
instance=hostname2, topic="AB_CD_EF_1345_ZY_XW_001_00001"
instance=hostname1, topic="AB_CD_EF_1235_ZY_XW_001_000001"
instance=hostname2, topic="AB_CD_EF_GH_4567_ZY_XW_01_000001"
instance=hostname1, topic="AB_CD_EF_35678_ZY_XW_001_00001"
instance=hostname2, topic="AB_CD_EF_56789_ZY_XW_001_000001"
我想从上面的示例中获取数字。我尝试使用下面的正则表达式来做到这一点,它们可以很好地用作单独的查询:
Regex: *.topic="AB_CD_EF_([^_]+).*
Matches: 12345 1345 1235
Regex: *.topic="AB_CD_EF_GH_([^_]+).*
Matches: 4567 35678 56789
但是我需要一个可以给我所有数字的正则表达式,即:
12345 1345 1235 4567 35678 56789
答案 0 :(得分:3)
将LvProducts
设为可选:
GH_
与您的所有目标号码匹配。
请参见live demo。
您可以通过以下方式允许使用任意数量的“字母下划线”序列来更通用:
.*topic="AB_CD_EF_(GH_)?([^_]+).*
请参见live demo。
答案 1 :(得分:1)
根据您给出的示例和条件,我认为您将需要一个非常严格的正则表达式,但这可能取决于您要如何适应它。查看以下正则表达式并阅读细分,以获取有关其功能的更多信息。使用第一组(此正则表达式中只有一个)作为替代,以检索您要查找的数字。
正则表达式
^instance\=hostname[0-9]+\,\s*topic\=\“[A-Z_]+([0-9]+)_[A-Z_]+[0-9_]+\”$
在此DEMO中尝试一下。
故障
^ # Asserts position at start of the line
hostname[0-9]+ # Matches any and all hostname numbers
\s* # Matches whitespace characters (between 0 and unlimited times)
[A-Z_]+ # Matches any upper-case letter or underscore (between 1 and unlimited times)
([0-9]+) # This captures the number you want
$ # Asserts position at end of the line
尽管这确实回答了您所提出的问题,但我担心这可能并非您要找的东西,但是如果没有进一步的信息,这是我能给您的最好的答案。无论如何,在您研究了故障并围绕演示进行了演示之后,它应该会有所帮助。
答案 2 :(得分:1)
我们可能会调用的另一个选项是类似于以下内容的表达式:
topic=".*?[A-Z]_([0-9]+)_.*?"
,我们想要的数字在此捕获组([0-9]+)
中。
答案 3 :(得分:1)
正则表达式为我工作:
sys.stdout