繁体   English   中英

python:我怎样才能用正则表达式制作这段代码?

[英]python: how can I make this code with regular expression?

如果我输入"1995y 05m 05d" ,那么我想制作一个打印"950505"的程序。 更多示例: "1949y 05m 23d" --> "490523"

import re
Birthday = str(input("insert your birth<(ex) xxxxy **m 00d> : "))
p= re.sub('[ymd ]','',Birthday)
print(p) #result is "xxxx**00"

这是我的代码。 我如何解决它? 任何解决方案?

由于您基本上是在使用日期字符串,因此您可以使用datetime.strptime()来解析它们:

>>> from datetime import datetime
>>> birthday = '1995y 05m 05d'
>>> datetime.strptime(birthday, '%Yy %mm %dd').strftime('%y%m%d')
'950505'

您现有的代码打印全年,您只需要两位数字。 只需跳过打印的前两位数字。

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

请求的正则表达式解决方案:

import re

s = '1995y 05m 05d'
print(''.join(re.findall(r'\d{2}(?=[ymd])', s)))

# 950505

使用findall查找ymd之前的所有两位数字,并使用join将所有数字连接到所需的格式。

birthday = input("birthday").split()
a = ''.join([''.join([i for i in c if i.isdigit()][-2:]) for c in birthday])

这不需要任何库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM