子串的Python正则表达式

时间:2015-06-29 03:55:16

标签: python regex

我想要的只是获取字符串的前3个数字字符:

st = '123_456'
import re
r = re.match('([0-9]{3})', st)
print r.groups()[0]
  1. 我是否正确抓住前3个角色?

  2. 这会返回123,但是如果我想获得前3个字符而不管数字和字母或特殊字符,该怎么办?

  3. 如果给出12_345,我只想抓取12_

    谢谢,

3 个答案:

答案 0 :(得分:1)

如果您总是需要字符串中的前三个字符,那么您可以使用以下内容:

first_3_charaters = st[:3]

在你的情况下不需要正则表达式。

答案 1 :(得分:0)

如果所有数字都以_分隔,那么您只需使用此正则表达式,该表达式会在第一个_之前贪婪地匹配所有数字字符。

r = re.match('([0-9]*)_', st)

实际上,此RE中的_不是必需的,因此您可以将其简化为(以便接受任何分隔符):

r = re.match('(\d*)', st)

此解决方案会在1234时为您提供st = '1234_56'。我不确定这是不是你的意图。

因此,如果您想要最多3个数字字符,您只需将正则表达式修改为:

r = re.match('(\d{,3})', st)

答案 2 :(得分:0)

你真的很接近,只需删除一组额外的括号并使用正确的零索引而不是一个。 Python索引从零开始。见下文。

这有效:

import re
mystring = '123_456'
check = re.search('^[0-9]{3}', mystring)
if check:
    print check.group(0)

^锚定到字符串的开头,这将确保仅匹配前三个数字。如果你不使用胡萝卜,正则表达式将匹配字符串中连续的三个数字。

有些人可能会建议\ d但这包括超过0-9。

正如其他人肯定会指出,如果所有字段都以您要提取的三个数字开头,那么简单的子字符串操作就可以完成。

祝你好运!