Nis*_*sfa 6 python regex string python-3.x
我有一个遵循特定格式的文件,看起来像这样:
test_0800_20180102_filepath.csv
anotherone_0800_20180101_hello.csv
Run Code Online (Sandbox Code Playgroud)
中间的数字代表时间戳,所以我想提取该信息。我知道有一个特定的模式永远是_time_date_,所以基本上我想要位于第一个和第三个下划线之间的字符串部分。我找到了一些示例和类似的问题,但我是 Python 新手,无法适应它们。
这是我迄今为止实施的:
datetime = re.search(r"\d+_(\d+)_", "test_0800_20180102_filepath.csv")
Run Code Online (Sandbox Code Playgroud)
但我得到的结果只是日期部分:
20180102
Run Code Online (Sandbox Code Playgroud)
但我真正需要的是:
0800_20180101
Run Code Online (Sandbox Code Playgroud)
这很简单:
match = re.search(r"_((\d+)_(\d+))_", your_string)
print(match.group(1)) # print time_date >> 0800_20180101
print(match.group(2)) # print time >> 0800
print(match.group(3)) # print date >> 20180101
Run Code Online (Sandbox Code Playgroud)
请注意,对于此类任务,正()则表达式中的组运算符非常有用,它允许您访问更大模式的某些子字符串,而无需单独匹配每个子字符串(有时这比匹配更大的更模糊)。
然后您访问组的顺序是 from 1-n_specified,其中 group0是整个匹配的模式。组本身是从左到右分配的,如您的模式中所定义。
附带说明一下,如果您可以控制它,请使用 unix 时间戳,这样您就只有一个数字来定义通用的日期和时间。