假设我有一个单词AB1234XZY
或1AB1234XYZ
。
我想只提取'AB1234'或1AB1234
(即一直到最后的字母)。
我使用以下代码来提取但不起作用:
base= re.match(r"^(\D+)(\d+)", word).group(0)
当我print base
时,它不适用于第二种情况。有什么想法吗?
答案 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]')