正则表达式提取字符串中的首个数字串及其后所有单词
我想在 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">
除了“空格”、“-”和“/”之外,不要其他标点符号。我只想匹配第一个出现的数字,以及在这个数字后面跟着的字母或单词,这些字母或单词前面是一个“-”或一个“空格”。
我尝试过:
-
这个表达式没有匹配到空格后面的字母。加上
\s?
后效果也不好。 -
这个可以匹配到字母,但我似乎无法修改它来去掉反斜杠后面的内容。
(\d+(?:(?:\-\w+)|\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)
它是怎么工作的?
^
在(?im)
的多行、不区分大小写模式中,表示我们在行的开头。\D*
会跳过任何非数字的字符。(\d+(?:[- ][a-z ]*[a-z])?)
会匹配并捕获到第一个组,数字后面可以跟一个短横线或空格,接着是更多的空格和字母,最后以一个字母结束。