0

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

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

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

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

当 I 时print base,它不适用于第二种情况。任何想法为什么?

4

3 回答 3

1

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

甚至是这样的

^(.+?)[a-zA-Z]+$
于 2012-10-17T15:51:48.450 回答
1

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

您应该能够为此使用一些非常简单的东西——事实上,比我在这里看到的任何其他东西都要简单。

'.*\d'

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

这是在线工作的模式,因此您可以自己查看。

于 2012-10-18T15:59:36.400 回答
0

re.match从字符串的开头开始,并re.search简单地在字符串中查找它。都返回第一场比赛。.group(0)是匹配中包含的所有内容,如果您有捕获组,那么.group(1)是第一个组......等等......与正常约定相反,其中 0 是第一个索引,在这种情况下,0 是一个特殊用例,意味着一切.

在您的情况下,取决于您真正需要捕获的内容,也许使用re.search更好。而不是使用2组,您可以使用(\D+\d+)记住,它将捕获第一个(非数字,数字)组。这对您来说可能就足够了,但您可能想要更具体。

在阅读了您的评论“最后字母之前的所有内容”之后

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

regex = re.compile(r'(.+)[A-Za-z]')
于 2012-10-17T16:13:27.777 回答