Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:如何使用正则表达式生成此代码?_Python_Regex_Date - Fatal编程技术网

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])