【问题标题】:Perl Regex extract substring because other substring existsPerl Regex 提取子字符串,因为存在其他子字符串
【发布时间】:2017-08-08 14:14:57
【问题描述】:
我需要提取一个子字符串,因为存在另一个子字符串。在以下示例中,单词 ERROR: 继续值 12345678。我需要值 12345678。在第二个示例中,ERROR: 不存在。因此我不需要结果。这是据我所知:
ERROR:.*(\d)
20170808 错误:已达到 TXN 12345678 请求限制。
20170808 WARN:TXN 22345678 等待过期。
如果您是正则表达式专家,那么您知道上述匹配项
错误:TXN 12345678
组只有数字 8。我需要整数。谢谢你的帮助。
【问题讨论】:
标签:
regex
perl
substring
conditional
【解决方案1】:
你可以使用
ERROR:.*?(\d+)
请参阅regex demo。在这里,.*? 将尽可能少地匹配除换行符之外的任何 0+ 字符(因为 *? 是一个惰性量词),(\d+) 将捕获到第 1 组一个或多个数字。
或者,也可以
ERROR:.*\D(\d+)
见another demo。在这里,.*\D 将尽可能匹配除换行符之外的任何 0+ 字符 many(因为 * 是一个贪婪的量词),直到并包括最后一个非数字字符(使用\D) 然后(\d+) 将捕获到第 1 组中的一位或多位数字。
选择最适合您的方案的模式(如果数字是ERROR: 之后的第一组数字,则第一个最好,而当该组数字是一行中的最后一个数字时,第二个最好)。