如何在d之前分割一个字符串

2024-10-04 09:25:42 发布

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

我有一个文本字符串,它的下半部分包含一个日期,格式为%d.%m.%y %H:%M|。前半部分包含用户名,其长度可以变化,可以包含数字,可以有多个尾随空格,并且在名称的某些部分中还有多个空格。例如:

john   smith    23    21.01.1994 02:23|
mr    magoo    30.04.05 23:37|
    Mr bing bong    29.01.10 20:53|

我怎样才能安全地把绳子一分为二?在

这个

^{pr2}$

大部分时间都有效,但名称中仍省略了4个空格()的情况。在


Tags: 字符串文本名称格式数字john用户名smith
3条回答

如果总是在最后2个项目上注明日期,您可以尝试以下操作:

name_date = "john   smith    23    21.01.1994 02:23"
name = " ".join(filter(None, name_date.split(" ")[:-2]))
date = " ".join(filter(None, name_date.split(" ")[-2:]))
print name, date

输出:

^{pr2}$

这是一个非常适合正则表达式的任务:

import re

dtpattern = re.compile(r'(?<=\s)\d{2}\.\d{2}\.(?:\d{2}|\d{4})\s+\d{2}:\d{2}(?=|)')
date = dtpattern.search(name_date).group()

这将匹配一个数字模式(每一组数字长度为2或4位数),中间有适当的分隔符;后向和前瞻模式确保匹配仅限于前面有空格、后面有管道字符的日期。在

^{pr2}$

如果您还需要名称以及,请将空白前的所有内容以及日期模式分组:

dtpattern = re.compile(r'(.*?)\s+(\d{2}\.\d{2}\.(?:\d{2}|\d{4})\s+\d{2}:\d{2})|')
name, date = dtpattern.search(name_date).groups()

>>> dtpattern = re.compile(r'(.*?)\s+(\d{2}\.\d{2}\.(?:\d{2}|\d{4})\s+\d{2}:\d{2})|')
>>> for line in samples:
...     name, date = dtpattern.search(line).groups()
...     print name
...     print date
... 
john   smith    23
21.01.1994 02:23
mr    magoo
30.04.05 23:37
    Mr bing bong
29.01.10 20:53

只需使用不带参数的split,就可以轻松地获得所需的任何数据,甚至可以将其放回一个规范化字符串中,用空格或逗号分隔。在

>>> name_date = name_date.split()
['john', 'smith', '23', '21.01.1994', '02:23|']
>>> name_date[3]
'21.01.1994'
>>> ', '.join(name_date)
'john, smith, 23, 21.01.1994, 02:23|'
>>> ' '.join(name_date)
'john smith 23 21.01.1994 02:23|'

相关问题 更多 >