使用Python从字符串内部提取日期

时间:2019-11-13 10:30:38

标签: python string split

我有以下字符串,而首字母可以不同,有时也可以是两个,有时是三个或四个。

PR191030.213101.ABD

我想提取191030并将其转换为有效日期。

filename_without_ending.split(".")[0][-6:]

PZA191030_392001_USB

有时候看起来像他的

此解决方案无效,因为这有时可能会有所不同。唯一的REAL模式实际上是前六个数字。

我该怎么做?

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以这样做:

a = 'PR191030.213101.ABD'
int(''.join([c for c in a if c.isdigit()][:6]))

输出:

191030

答案 1 :(得分:3)

您可以使用捕获组的模式获取前6位数字

^[A-Z]{2,4}(\d{6})\.
  • ^字符串的开头
  • [A-Z]{2,4}匹配2、3或4个大写字符
  • (捕获组1
    • \d{6}匹配6位数字
  • )\.关闭组并匹配尾随点

Regex demo | Python demo

例如

import re

regex = r"^[A-Z]{2,4}(\d{6})\."
test_str = "PR191030.213101.ABD"
matches = re.search(regex, test_str)

if matches:
    print(matches.group(1))

输出

191030

答案 2 :(得分:1)

这也可以通过以下方式完成:

filename_without_ending.split(".")[0][2::]

这会将字符串从第3个字母分割到结尾。

答案 3 :(得分:0)

由于首字母可以不同,我们必须忽略字母并提取数字。

因此,使用re模块(用于正则表达式)对字符串应用正则表达式模式。它将给出匹配模式的字符串。

'\ d'用于匹配[0-9]个数字,而+运算符用于匹配至少1个数字(1 / more)。

findall()将查找给定字符串中所有匹配模式的出现,而#search()仅用于查找匹配的第一次出现。

重新导入

str =“ PR191030.213101.ABD”

print(re.findall(r“ \ d +”,str)[0])

print(re.search(r“ \ d +”,str).group())