正则表达式,用于查找给定关键字中第一个出现的数字

时间:2016-01-22 13:04:01

标签: regex perl pcre pcregrep

我有一个字符串

  

“ZTFN00识别号码是89320394,手机号码是+918017828848”

我想从关键字ZTFN中识别出第一次出现的数字(在这种情况下为 89320394 )。此外,表达式不应使用ZTFN返回00,并且仅返回第一次出现的数字。

我尝试了\d+(?!ZTFN00),但它不起作用!!

请建议

3 个答案:

答案 0 :(得分:3)

这应该这样做:

perl -ne '/ZTFN00\D+(\d+)/ && print $1,"\n"' yourfile

如果您的'号码'总是以空格分隔(在ZTFN之后没有00),那么您可以将其用作测试:

perl -ne 'print m/\b(\d+)\b/,"\n"' yourfile

答案 1 :(得分:0)

grep -Po 'ZTFN00.*?\K\b\d+\b'

返回在该数字之前看到ZTFN00的行中的字边界之间的第一个数字。 \K是一个可变长度的后视:“匹配我左边的内容,但不保留它”。

答案 2 :(得分:0)

谢谢你们! 简单来说,我正在寻找的是这个 如果有一个字符串,它有一个关键字ZTFN00,那么正则表达式应该能够将最接近的9到11位数字返回到字符串的左侧或右侧。

我想在oracle的REGEXP_REPLACE函数中执行此操作。

以下是一些示例字符串

  1. 作为合并的一部分,SAP UPDATE_BP服务中发生以下错误(错误:653,R11:186:已存在ID类型ZTFN00的号码867278489)
  2. 在上面,正则表达式将返回867278489

    1. 作为合并的一部分,SAP UPDATE_BP服务中发生以下错误(错误:653,R11:186:编号ZTFN00标识号123456778已存在)
    2. 在上面,正则表达式将返回123456778

      非常感谢您分享您的专业知识和指导