用正则表达式构建字符串

时间:2014-12-03 22:36:43

标签: python regex

所以我对python很新,我只是用这种语言自学,但我遇到了一些障碍。

我要做的是构建一个字符串,其中包含一个可以是任何长度或图案的数字。例如:

   "Data_image_%s.%d" %(myStr, r'[0-9]+') 
   # Well, this won't actually work since %d is expecting an integer,
   # but you get the idea.

当我这样做时,我会回来

Data_image_picture.[0-9]+.png

最终目标是创建一个类似于:Data_image_picture.1234567.png

的字符串

关于如何纠正这个问题的任何想法?

编辑:我要做的是从公司网站上拍摄图像,但图像网址是动态的,具体取决于图像加载到浏览器的人和时间。所以格式通常是“data_image_Joe_session#id.png

编辑2:我认为我一直在以错误的方式解决这个问题,我可能需要解析数据以确定我需要的字符串模式,而不是像我一直创建一个适合所有字符串的字符串做。

感谢您的时间和帮助

2 个答案:

答案 0 :(得分:1)

正则表达式用于匹配,而不是用于构建字符串或构建随机数。

要构建一个0到9999999之间随机数的字符串,您可以执行以下操作:

from random import random

myStr = "Data_image_picture." + str(int(random()*10000000)) + ".png"

答案 1 :(得分:1)

%d用作数字或小数值的placeholder

他们是format specifiers。当您希望将Python表达式的值包含在字符串中时,可以使用它们,并强制执行特定格式。

所以%d接受整数但将其放在字符串中。

>>> image_name = "picture"
>>> image_number = 1234567
>>> "Data_image_%s.%d.jpg"%(image_name,image_number)
'Data_image_picture.1234567.jpg'
#OR
>>> "Data_image_{}.{}.jpg".format(image_name,image_number)
'Data_image_picture.1234567.jpg'

您可以检查字符串中格式化的数字类型:

>>> type(image_number)
<type 'int'>

您可以获取任何长度的数量。

>>> image_number = 123456789234567
>>> image_name = "picture"
>>> "Data_image_%s.%d.jpg"%(image_name,image_number)
'Data_image_picture.123456789234567.jpg'
>>> type(image_number)
<type 'long'>

这是在Python 2中,但在Python 3中,整数可以保留很长的数字。

在Python3中:

image_number = 123456789234567
image_name = "picture"
print ("Data_image_%s.%d.jpg"%(image_name,image_number))
print (type(image_number))

结果:

Data_image_picture.123456789234567.jpg
<class 'int'>