Perl Regex 提取子字符串,因为存在其他子字符串
Perl Regex extract substring because other substring exists
我需要提取一个子字符串,因为存在另一个子字符串。在以下示例中,单词 ERROR: 产生值 12345678。我需要值 12345678。在第二个示例中,ERROR: 不存在。因此我不需要结果。据我所知:
ERROR:.*(\d)
20170808 ERROR: TXN 12345678 Request limit reached.
20170808 WARN: TXN 22345678 Pending expire.
如果您是正则表达式专家,那么您就知道上述匹配项
ERROR: TXN 12345678
组只有数字8。我需要整数。谢谢你的帮助。
您可以使用
ERROR:.*?(\d+)
见regex demo。在这里,.*?
将匹配除换行符以外的任何 0+ 个字符(因为 *?
是惰性量词)并且 (\d+)
将捕获到第 1 组一个或多个数字.
或者,或者,
ERROR:.*\D(\d+)
参见 another demo。在这里,.*\D
将尽可能匹配 many(因为 *
是一个贪婪的量词),直到并包括最后一个非数字字符(\D
)然后 (\d+)
将捕获到第 1 组一个或多个数字。
选择最适合您的情况的模式(如果数字是 ERROR:
之后的第一组数字,则第一个是最好的,当该组数字是一行中的最后一个数字时,第二个是最好的).
我需要提取一个子字符串,因为存在另一个子字符串。在以下示例中,单词 ERROR: 产生值 12345678。我需要值 12345678。在第二个示例中,ERROR: 不存在。因此我不需要结果。据我所知:
ERROR:.*(\d)
20170808 ERROR: TXN 12345678 Request limit reached.
20170808 WARN: TXN 22345678 Pending expire.
如果您是正则表达式专家,那么您就知道上述匹配项
ERROR: TXN 12345678
组只有数字8。我需要整数。谢谢你的帮助。
您可以使用
ERROR:.*?(\d+)
见regex demo。在这里,.*?
将匹配除换行符以外的任何 0+ 个字符(因为 *?
是惰性量词)并且 (\d+)
将捕获到第 1 组一个或多个数字.
或者,或者,
ERROR:.*\D(\d+)
参见 another demo。在这里,.*\D
将尽可能匹配 many(因为 *
是一个贪婪的量词),直到并包括最后一个非数字字符(\D
)然后 (\d+)
将捕获到第 1 组一个或多个数字。
选择最适合您的情况的模式(如果数字是 ERROR:
之后的第一组数字,则第一个是最好的,当该组数字是一行中的最后一个数字时,第二个是最好的).