如何使用正则表达式将字符串与python中的数字匹配?

时间:2012-05-17 17:58:29

标签: python regex

我是正则表达式的新手,但是我希望匹配一个字符串,直到数字开始。

所以我只说:

EEEE1234

然后我想只提取:

EEEE

我尝试过搜索,但我发现正则表达式令人困惑,我认为最好的方法是通过示例。有什么想法吗?此外,任何有关任何正则表达式代码生成器或良好的教程的见解?

4 个答案:

答案 0 :(得分:5)

使用\ D表示“不是数字”:

r"^\D+"

示例:

import re

s = "EEEE1234"
print re.match(r"^\D+",s).group(0)

查看在线工作:ideone

您已经获得了一些教程建议,但我还想补充一点,如果您还没有看到documentation for the re module,那么您应该将其标记为并在阅读完之后阅读基础教程。该文档不是初学者级别,但它有一些非常有用的技巧,特别是在Python中使用正则表达式,最后还有一些例子。

答案 1 :(得分:3)

  • \d =一位数(数字0到9)
  • \D =一位非数字
  • \D+ =一个或多个非数字
  • \D+\d =一个或多个非数字后跟一位数字
  • (\D+)\d =在一个组中捕获的一个或多个非数字,后跟一个数字

所以,如果你有一个字符串

str = 'EEEE1234'

然后你可以import re并使用re.match来匹配字符串上的正则表达式:

re.match(r'(\D+)\d', str)

这将为您提供一个匹配对象,您可以从中提取该组的内容:

re.match(r'(\D+)\d', str).group(1)

这将包含EEEE

答案 2 :(得分:1)

也许有一点可能有用,就是将正则表达式视为一种工具,首先执行匹配操作。搜索,替换和字符串拆分都是这种能力的结果。一个例子,取决于你想要提取所需部分的方式:

r"^(\D+)\d*"

此正则表达式使用您稍后可以引用的捕获组

出于学习目的,正如已经提到的那样,有许多资源。如果您对正则表达式如何工作感兴趣,或者想要更好地理解它们,您可能需要阅读一些关于regular languages的内容。

答案 3 :(得分:0)

如果我们专门寻找字母符合数字的时候,我会做类似的事情:

re.search(r'[a-zA-Z]+(?=\d+)')

只有当数字跟随数字时才匹配,但不会返回数字本身。这样你也可以避免群体,这可能是混乱的。