尝试编写将在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;。
我试过了:
这错过了空间之后的字母。添加\s?
并不适合我。
这会收集这些字母,但我似乎无法修改它以摆脱反斜杠后的内容。
(\d+(?:(?:\-\w+)|\w))[^\/]*(\/*.*)
我试图使用[]
来解决这些反斜杠问题。这显然是不成功的。
答案 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)
它是如何运作的?
^
多行,不区分大小写的模式中的(?im)
将我们固定在行的开头。\D*
会跳过任何非数字(\d+(?:[- ][a-z ]*[a-z])?)
匹配,并捕获到第1组,数字可选地后跟短划线或空格以及更多空格和字母,以字母结尾。