【问题标题】:Perl regex extract two consecutive wordsPerl 正则表达式提取两个连续的单词
【发布时间】:2015-10-28 11:45:56
【问题描述】:

我正在尝试从列表中提取包含由一个或多个空格分隔的两个单词的字符串。 示例:

@a=("aaa12:.", "lala lulu", "erwer", ",", "lala   loqw  asqwd", "asdas   sadsad", "asasd| asq");
@b=grep {/\w+\s+\w+/} @a;

这给了我

      'lala lulu',
      'lala   loqw  asqwd',
      'asdas   sadsad'

但我不想用三个单词grep...

我尝试了@b=grep {/^\w\s+\w$/},但没有找到任何匹配项。应该很简单,但我就是不明白。我在这里需要哪个正则表达式?

【问题讨论】:

    标签: regex perl grep pattern-matching


    【解决方案1】:

    \w 只匹配一个字符。您需要以下内容:

    /^\w+\s+\w+\z/
    
    • ^ 匹配字符串的开头。
    • \w+ 匹配多个“单词”字符之一。
    • \s+ 匹配多个空白字符之一。
    • \w+ 匹配多个“单词”字符之一。
    • \z 匹配字符串的结尾。

    【讨论】:

    【解决方案2】:

    I tried @b=grep {/^\w\s+\w$/} but then I don't get any matches

    它不起作用的唯一原因是您在
    处遗漏了量词 开始/结束:

    /^\w\s+\w$/  
        ^    ^  
    

    如果是/^\w+\s+\w+$/,它会在哪里正常工作

    不过,更好的方法是使用空格增加一些灵活性:/^\s*\w+\s+\w+\s*$/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2011-12-31
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      相关资源
      最近更新 更多