正则表达式提取字符串中的第一个数字系列和之后的所有单词

时间:2014-06-12 23:39:41

标签: python regex python-2.7 regex-negation

尝试编写将在python 2.7中执行以下操作的正则表达式:

FOO 288-B BAR <MATCH: "288-B BAR">

BURT 69/ERNIE 96/KERMIT 287 <MATCH: "69">

53 ORANGE <MATCH: "53 ORANGE">

APPLE 457-W <MATCH: "457-W">

除了&#34;空间&#34;和&#39; - &#39;和&#39; /&#39;没有其他标点符号。我只是希望匹配任何数字的第一个匹配项以及之后的任何字母/单词,其前面是&#39; - &#39;或者&#34;空间&#34;。

我试过了:

1 个答案:

答案 0 :(得分:3)

如果我了解您的要求,您可以使用它,然后从第1组中检索匹配:

(?im)^\D*(\d+(?:[- ][a-z ]*[a-z])?)

这是demo(请查看右下方窗格中的捕获组)。

检索匹配项:

for match in re.finditer(r"(?im)^\D*(\d+(?:[- ][a-z ]*[a-z])?)", subject):
    yournumber = match.group(1)

它是如何运作的?

  1. ^多行,不区分大小写的模式中的(?im)将我们固定在行的开头。
  2. \D*会跳过任何非数字
  3. (\d+(?:[- ][a-z ]*[a-z])?)匹配,并捕获到第1组,数字可选地后跟短划线或空格以及更多空格和字母,以字母结尾。