我想要的只是获取字符串的前3个数字字符:
st = '123_456'
import re
r = re.match('([0-9]{3})', st)
print r.groups()[0]
我是否正确抓住前3个角色?
这会返回123
,但是如果我想获得前3个字符而不管数字和字母或特殊字符,该怎么办?
如果给出12_345
,我只想抓取12_
谢谢,
答案 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。
正如其他人肯定会指出,如果所有字段都以您要提取的三个数字开头,那么简单的子字符串操作就可以完成。
祝你好运!