我是正则表达式的新手,但是我希望匹配一个字符串,直到数字开始。
所以我只说:
EEEE1234
然后我想只提取:
EEEE
我尝试过搜索,但我发现正则表达式令人困惑,我认为最好的方法是通过示例。有什么想法吗?此外,任何有关任何正则表达式代码生成器或良好的教程的见解?
答案 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+)')
只有当数字跟随数字时才匹配,但不会返回数字本身。这样你也可以避免群体,这可能是混乱的。