regex lookback获取第一个单词

2024-10-01 17:39:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望使用regex从日期值中获取第一个单词。没有一个确切的单词模式,但我只是想获得日期之前的第一个单词(不是整个字符串)。你知道吗

到目前为止我所拥有的:

regexDate = r'.*(?=)[w]*\d{2}\/\d{2}\/\d{4}|.*(?=)[a-zA-Z]+\s[0-9][0-9],?\s[0-9][0-9][0-9][0-9]|.*(?=)\d{2}-\d{2}-\d{4}|\d{2}/\w*/\d{4}|.*(?=)\d{2}-\w*-\d{4}|.*(?=)\d{2}.\w*.\d{4}|.*(?=)\d{4}/\d{2}/\d{2}|.*(?=)\d{2}-\w*-\d{2}|.*(?=)\d{2}/\d{2}/\d{2}'

text = 'blah blah Start: 01-Oct-2018 blah blah End: 30-Sep-2019'

find =  re.findall(regexDate, text)

结果:

['blah blah Start: 01-Oct-2018 blah blah End: 30-Sep-2019']

在这种情况下,我只想得到“开始时间:2018年10月1日”和“结束时间:2019年9月30日”。你知道吗

注意:开始和结束在其他情况下可能是一组不同的单词。日期格式也不同。你知道吗

我确实尝试过把.*(?=)包装在可能性周围,但它只会在2019年9月30日返回。也许有人可以建议一个更干净的版本呢?你知道吗


Tags: 字符串text时间模式情况find单词start
3条回答

这似乎做到了:

re.findall(r'\b\S+\s+\d\d?-[A-Za-z]{3}-\d{4}\b', text)

退货:

['Start: 01-Oct-2018', 'End: 30-Sep-2019']

开头的\b强制以word开头(分词),后跟由not空格和一个或多个空格组成的字符串,然后是日期表达式。你知道吗

我猜你在找这样的东西?(?i)start:\s*(?<start>\d\d-\w+-\d{4}).*end:\s*(?<end>\d\d-\w+-\d{4})

Demo

回答晚了,但有个办法:

[^ ]+: [^ ]+

import re
text = 'blah blah Start: 01-Oct-2018 blah blah End: 30-Sep-2019'
result = re.findall("[^ ]+: [^ ]+", text)
# ['Start: 01-Oct-2018', 'End: 30-Sep-2019']

相关问题 更多 >

    热门问题