我的数据如下所示,我需要使用正则表达式捕获时间或年,周,日:
10.174.17.32/29 [20/0] via 10.174.30.129, `18years2weeks3days`, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, `18y2w3d`, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, `7w0d`, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, `366days`, somedata
10.174.17.32/29 is directly connected, `12:46:02`, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, `00:00:56`, somedata
我用Python编写了此正则表达式:
res = re.compile(r'[0-9]{0,3}[a-zA-Z]{0,5}[0-9]{0,2}[a-zA-Z]{0,5}[0-9]{0,3}[a-zA-Z]{0,4}')
但是此正则表达式也捕获了很多不需要的东西。我只需要用时间,年,周和天来捕捉时间或单词。
如果可以使用两个正则表达式来完成此操作,我将很高兴,如果有一个可以这样做的正则表达式,那就太好了!在我尝试捕获的数据之前或之后,数据的长度可能会有所不同,其中会包含更多不需要的内容。谢谢!!
此正则表达式分析行的年,周,天和时间(regex101):
data = '''
10.174.17.32/29 [20/0] via 10.174.30.129, 18years2weeks3days, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, 18y2w3d, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, 7w0d, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, 366days, somedata
10.174.17.32/29 is directly connected, 12:46:02, somedata
10.174.17.32/29 [20/0] via 10.174.30.129, 00:00:56, somedata'''
import re
print('{:^15} {:^15} {:^15} {:^15}'.format('Years', 'Weeks', 'Days', 'Time'))
for years, weeks, days, time in re.findall(r'(?:(\d+)y(?:ears?)?)?(?:(\d+)w(?:eeks?)?)?(\d+)d(?:ays?)?|(\d+:\d+:\d+)', data):
print('{:^15} {:^15} {:^15} {:^15}'.format(years, weeks, days, time))
印刷品:
Years Weeks Days Time
18 2 3
18 2 3
7 0
366
12:46:02
00:00:56
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句