正则表达式代码不起作用(Python)

时间:2012-10-17 15:43:25

标签: python regex

假设我有一个单词AB1234XZY1AB1234XYZ

我想只提取'AB1234'或1AB1234(即一直到最后的字母)。

我使用以下代码来提取但不起作用:

base= re.match(r"^(\D+)(\d+)", word).group(0)

当我print base时,它不适用于第二种情况。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

(.+?\d+)\w+会给你你想要的东西。

甚至可能是这样的

^(.+?)[a-zA-Z]+$

答案 1 :(得分:1)

你的正则表达式不适用于第二种情况,因为它以数字开头;模式开头的\D匹配任何不是数字的东西。

你应该可以使用一些非常简单的东西 - 实际上比我在这里看到的任何东西都简单。

'.*\d'

就是这样!这应该匹配所有内容,包括字符串中的最后一个数字,并在此之后忽略所有内容。

Here's the pattern working online,所以你可以亲眼看看。

答案 2 :(得分:0)

re.match从字符串的开头开始,re.search只是在字符串中查找它。都返回第一场比赛。 .group(0)是匹配中包含的所有内容,如果你有捕获组,那么.group(1)是第一组...等等...而不是普通约定,其中0是第一个索引,在此case,0是一个特殊用例,意思是一切。

在您的情况下,根据您真正需要捕获的内容,使用re.search可能会更好。而不是使用2组,您可以使用(\D+\d+)时记住,它将捕获第一个(非数字,数字)组。它可能就足够了,但你可能想要更具体一些。

阅读你的评论“结尾前的所有信息”

这个正则表达式是你需要的:

regex = re.compile(r'(.+)[A-Za-z]')