使用正则表达式捕获字母数字字符串

时间:2016-07-28 19:54:49

标签: regex perl

我有一个包含以下任何字符串的文件

"155"
>555.123.4567
>555-123-4567
>(555).123.4567
>(555)123-4567
>(555)-123-4567

我想使用正则表达式

捕获除了1st之外的字符串,输出如下所示
555.123.4567
555-123-4567
(555).123.4567
(555)123-4567
(555)-123-4567

到目前为止,我只能提出下面的正则表达式,但它只适用于最后三个字符串

/(\([\d]+\).\-?(-|)[\d]+.-?[\d]+)/g

2 个答案:

答案 0 :(得分:1)

您可以将此正则表达式与可选分隔符一起使用以匹配您的输入:

/[(]?\d{3}[)]?[.-]?\d{3}[.-]?\d{4}\b/

RegEx Demo

答案 1 :(得分:0)

看起来你想要搜索

  1. 括号中的三位数字,或仅三位数字

  2. 点或连字符,或无任何

  3. 三位数

  4. 至少一个点或连字符

  5. 四位数

  6. 这个正则表达式是对此的音译。请注意,添加具有复杂模式的/x修饰符始终是明智的,这样您就可以添加无关紧要的空格和换行符以使程序更具可读性

    use strict;
    use warnings 'all';
    use feature 'say';
    
    while ( <DATA> ) {
        next unless / (
            (?: \( \d{3} \) | \d{3} )
            ([.-]|)
            \d{3}
            [.-]
            \d{4}
        ) /x;
    
        say $1;
    
    }
    
    
    __DATA__
    "155"
    >555.123.4567
    >555-123-4567
    >(555).123.4567
    >(555)123-4567
    >(555)-123-4567
    

    输出

    555.123.4567
    555-123-4567
    (555).123.4567
    (555)123-4567
    (555)-123-4567
    

    但这非常具体,看起来你正在验证手动输入的电话号码。我不确定你会不会因此而变得更好

    1. 一些数字和括号

    2. 点或连字符

    3. 更多数字,圆点或连字符

    4. 看起来像这样

      / ( [()\d]+ [.-] [\d.-]+  ) /x