python:如何使用正则表达式生成此代码?
如果我输入python:如何使用正则表达式生成此代码?,python,regex,date,Python,Regex,Date,如果我输入“1995y 05m 05d”,那么我想制作一个打印“950505”的程序。更多示例:“1949y 05m 23d”-->“490523” 重新导入 生日=str(输入(“插入您的出生:”) p=re.sub(“[ymd]”,“,”,生日) 打印(p)#结果为“xxxx**00” 这是我的密码。我怎么修理它?有解决方案吗?您现有的代码打印全年,您只需要两位数。只需跳过打印的前两个数字 print(p[2:]) 它将从位置2(第三个字符,因为列表从0开始计数)开始打印p,范围没有结尾
“1995y 05m 05d”
,那么我想制作一个打印“950505”
的程序。更多示例:“1949y 05m 23d”
-->“490523”
重新导入
生日=str(输入(“插入您的出生:”)
p=re.sub(“[ymd]”,“,”,生日)
打印(p)#结果为“xxxx**00”
这是我的密码。我怎么修理它?有解决方案吗?您现有的代码打印全年,您只需要两位数。只需跳过打印的前两个数字
print(p[2:])
它将从位置2(第三个字符,因为列表从0开始计数)开始打印
p
,范围没有结尾,因此它将打印除前两个字符(示例中的19
)之外的整个字符串。使用正则表达式:
>>> import re
>>> a = re.findall("\d+","1995y 05m 05d")
>>> a[0] = a[0][2:]
>>> output = ""
>>> for item in a:
output += item
>>> int(output)
950505
>>>
由于您基本上使用的是日期字符串,因此可以使用来解析它们:
>>> from datetime import datetime
>>> birthday = '1995y 05m 05d'
>>> datetime.strptime(birthday, '%Yy %mm %dd').strftime('%y%m%d')
'950505'
请求的正则表达式解决方案:
import re
s = '1995y 05m 05d'
print(''.join(re.findall(r'\d{2}(?=[ymd])', s)))
# 950505
使用findall
查找y
、m
和d
之前的所有两位数字,以及join
将所有数字合并为所需格式
birthday = input("birthday").split()
a = ''.join([''.join([i for i in c if i.isdigit()][-2:]) for c in birthday])
这样做不需要任何库任何理由使用正则表达式而不是
datetime.strtime
,这也将验证您是否有有效的日期,而不仅仅是一个看起来可能是一个日期的模式等等。。。然后将其格式化为%y%m%d?(但一个快速解决方法是忽略前两个字符…)每个18岁以上的人都应该告诉你:不要用两位数的年份来处理或存储日期。@KlausD。但它节省了整整两个字节的存储空间-可能会出现什么问题帕索。。。如果有人只是输入“这与要求的格式不匹配”或“92834927349827492387492837237”,该怎么办?或几乎是正确的格式,但顺序错误。。。例如:“23d 1949y 05m”?为什么你会要求某人以如此不寻常的格式输入他们的bd?最好做p[-2:
,以防年份只有两位数。@你的意思是p[-6:
?
birthday = input("birthday").split()
a = ''.join([''.join([i for i in c if i.isdigit()][-2:]) for c in birthday])