正则表达式提取字符串中的首个数字串及其后所有单词

1 投票
1 回答
933 浏览
提问于 2025-04-18 09:37

我想在 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">

除了“空格”、“-”和“/”之外,不要其他标点符号。我只想匹配第一个出现的数字,以及在这个数字后面跟着的字母或单词,这些字母或单词前面是一个“-”或一个“空格”。

我尝试过:

1 个回答

3

如果我理解你的需求,你可以使用这个,然后从第一个组中获取匹配的内容:

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

这里有一个演示(请查看右下角的捕获组)。

要获取匹配的内容:

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])?)会匹配并捕获到第一个组,数字后面可以跟一个短横线或空格,接着是更多的空格和字母,最后以一个字母结束。

撰写回答