Python正则表达式在前两个空格之间查找单词

时间:2020-06-10 06:38:09

标签: python regex

我有一些格式的文件创建时间数据。

Thu Jan  2 17:05:37 2020
Thu Feb 27 11:17:14 2020

我只想从输出中的该字符串(一月,二月)中提取月份,然后删除其他字符串。

我尝试了以下正则表达式

^\S*\s+(\S+)

它给我的输出是(Thu Feb),但我只需要月份部分。

6 个答案:

答案 0 :(得分:1)

另一种方法是让dateutil为您解析:

import dateutil.parser as dparser

l = ['Thu Jan  2 17:05:37 2020', 'Thu Feb 27 11:17:14 2020']

months = [dparser.parse(i, fuzzy=True).strftime("%b") for i in l]
months

输出:

['Jan', 'Feb']

答案 1 :(得分:0)

您可以尝试split()

L="Thu Jan  2 17:05:37 2020"
print(L.split()[1])

答案 2 :(得分:0)

import re

str = "Thu Jan  2 17:05:37 2020"

print(re.sub("^\S*\s+(\S+)\s.*", r"\1", str))

礼物:

Jan

答案 3 :(得分:0)

您的问题与您的要求不同。如果您只寻找空格,那么它可能会出现几个月的错误行为。如果您想提取月份,我会为您写一个简单的小片段。

import calendar
import re
months=[calendar.month_abbr[i] for i in range(1,13)]

txt=["Thu Jan  2 17:05:37 2020","Thu Feb 27 11:17:14 2020"]


for j in txt:
    print([(j,i)  for i in months if len(re.findall(i,j))>0])

输出:

[('Thu Jan  2 17:05:37 2020', 'Jan')]
[('Thu Feb 27 11:17:14 2020', 'Feb')]

答案 4 :(得分:0)

这是一个相当简单的解决方案:

import re

str = "Thu Jan  2 17:05:37 2020"
print(re.match("^\S{3}\ (\S{3})", str).group(1))

输出:“ Jan”

无需处理原始字符串。

答案 5 :(得分:-1)

您已经捕获了月份,为什么不使用它呢?

enter code here str =“ 2020年1月2日星期四17:05:37 enter code here p = r“ ^ \ S * \ s +(\ S +)\ s。*” enter code here t = re.search(p,str) enter code here print(“ $ 1:”,t.group(1))