2

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

所以就说我有:

EEEE1234

然后我只想提取:

EEEE

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

4

4 回答 4

5

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

r"^\D+"

例子:

import re

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

在线查看它:ideone

您已经获得了一些关于教程的建议,但我还想补充一点,如果您还没有看过该模块的文档re,您应该在阅读完更基本的教程后将其加入书签并阅读。该文档不是初学者级别的,但它有一些非常有用的技巧,专门用于在 Python 中使用正则表达式,并且在结尾处还有一些示例。

于 2012-05-17T18:00:00.113 回答
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.

于 2012-05-17T18:10:03.690 回答
1

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

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

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

如前所述,出于学习目的,有许多资源。如果您对正则表达式的工作原理感兴趣,或者想更好地理解它们,您可能需要阅读一些关于正则语言的内容。

于 2012-05-17T18:00:06.900 回答
0

如果我们专门寻找字母何时遇到数字,我会做类似的事情:

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

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

于 2012-05-17T18:43:52.367 回答