假设我有一个词AB1234XZY
甚至1AB1234XYZ
.
我只想提取“AB1234”或1AB1234
(即直到最后的字母)。
我已经使用以下代码来提取它,但它不起作用:
base= re.match(r"^(\D+)(\d+)", word).group(0)
当 I 时print base
,它不适用于第二种情况。任何想法为什么?
(.+?\d+)\w+
会给你你想要的。
甚至是这样的
^(.+?)[a-zA-Z]+$
您的正则表达式不适用于第二种情况,因为它以数字开头;\D
模式开头的 匹配任何不是数字的东西。
您应该能够为此使用一些非常简单的东西——事实上,比我在这里看到的任何其他东西都要简单。
'.*\d'
而已!这应该匹配所有内容,包括字符串中的最后一个数字,并忽略之后的所有内容。
这是在线工作的模式,因此您可以自己查看。
re.match
从字符串的开头开始,并re.search
简单地在字符串中查找它。都返回第一场比赛。.group(0)
是匹配中包含的所有内容,如果您有捕获组,那么.group(1)
是第一个组......等等......与正常约定相反,其中 0 是第一个索引,在这种情况下,0 是一个特殊用例,意味着一切.
在您的情况下,取决于您真正需要捕获的内容,也许使用re.search
更好。而不是使用2组,您可以使用(\D+\d+)
记住,它将捕获第一个(非数字,数字)组。这对您来说可能就足够了,但您可能想要更具体。
在阅读了您的评论“最后字母之前的所有内容”之后
这个正则表达式是你需要的:
regex = re.compile(r'(.+)[A-Za-z]')