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

正则表达式代码不起作用(Python),python,regex,Python,Regex,假设我有一个单词AB1234XZY甚至1AB1234XYZ 我只想提取'AB1234'或1AB1234(即,直到最后的字母为止的所有内容) 我使用了以下代码来提取它,但它不起作用: base= re.match(r"^(\D+)(\d+)", word).group(0) 当Iprint base时,它不适用于第二种情况。你知道为什么吗?(.+?\d+)\w+会给你想要的 甚至像这样 ^(.+?)[a-zA-Z]+$ re.match从字符串开头开始,而re.search只是在字符串中查找它

假设我有一个单词
AB1234XZY
甚至
1AB1234XYZ

我只想提取'AB1234'或
1AB1234
(即,直到最后的字母为止的所有内容)

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

base= re.match(r"^(\D+)(\d+)", word).group(0)
当I
print base
时,它不适用于第二种情况。你知道为什么吗?

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

甚至像这样

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

re.match
从字符串开头开始,而
re.search
只是在字符串中查找它。双方都返回第一场比赛
.group(0)
是比赛中包括的所有内容,如果你有捕获组,那么
.group(1)
是第一组…等等。。。与0是第一个索引的常规约定相反,在本例中,0是一个特殊的用例,意味着一切

在您的情况下,根据您真正需要捕获的内容,可能使用
re.search
更好。您可以使用
(\D+\D+)
而不是使用两个组。请记住,它将捕获第一个(非数字、数字)组。这对你来说可能已经足够了,但你可能想说得更具体一些

读了你的评论“结尾字母前的所有内容”

此正则表达式是您需要的:

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

您的正则表达式不适用于第二种情况,因为它以数字开头;模式开头的
\D
匹配任何非数字的内容

您应该能够使用一些非常简单的方法来实现这一点——事实上,这比我在这里看到的任何其他方法都要简单

'.*\d'
就这样!这应该匹配字符串中最后一个数字之前的所有内容,并忽略之后的所有内容


,以便您自己查看。

是否要在这两种情况下匹配到
123
?如果你有不同的数字怎么办:-AB123452A?你想匹配文本之间的数字吗?我想提取AB1234,所以基本上是在结尾字母之前的所有内容。我很确定我以前在那里工作过的代码…@user1328021为什么不把输入字符串放在搜索框中,这样我们可以更好地理解。此外,如果这些答案中的任何一个有助于回答您的问题,您可以将其标记为已接受,或者,如果您已经解决了自己的问题,您可以将其作为答案发布在此处,以便其他人可以学习。我要搜索的输入字符串是我编写的
1AB1234XYZ
,我想提取
1AB1234
。。。在结尾字母后缀之前的所有内容。我正在尝试下面列出的解决方案,并将标记一个有效的答案。谢谢
re.match
vs
re.search
应该无关紧要,因为他使用的是
^
锚。这将强制匹配从字符串的开头开始。如果我是你,我会使首字母
+
贪婪,因为这不适用于
12AB1234XYZ
(开头有2个或更多数字)。不过,它应该适用于他的样品。谢谢!!!!我知道必须有一个更简单的方法。谢谢你把我介绍给RegexPlanet。那个网站太棒了。