Vic*_*cky 6 python regex datetime python-3.x pandas
我有一个包含日期时间的字符串,我试图根据日期时间的出现来分割字符串,
data="2018-03-14 06:08:18, he went on \n2018-03-15 06:08:18, lets play"
Run Code Online (Sandbox Code Playgroud)
我在做什么,
out=re.split('^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$',data)
Run Code Online (Sandbox Code Playgroud)
我得到什么
["2018-03-14 06:08:18, he went on 2018-03-15 06:08:18, lets play"]
Run Code Online (Sandbox Code Playgroud)
我想要的是:
["2018-03-14 06:08:18, he went on","2018-03-15 06:08:18, lets play"]
Run Code Online (Sandbox Code Playgroud)
您希望使用至少 1 个空格进行分割,后跟类似日期的模式,因此,您可以使用
re.split(r'\s+(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)', s)
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
细节
\s+- 1+ 空白字符(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)-积极的前瞻,确保紧邻当前位置的左侧,有
\d{2}(?:\d{2})?- 2 或 4 位数字-- 连字符\d{1,2}- 1 或 2 位数字-\d{1,2}- 再次是连字符和 1 或 2 位数字\b - 单词边界(如果不需要,请将其删除,或者替换为,(?!\d)以防日期粘在字母或其他文本上)import re
rex = r"\s+(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)"
s = "2018-03-14 06:08:18, he went on 2018-03-15 06:08:18, lets play"
print(re.split(rex, s))
# => ['2018-03-14 06:08:18, he went on', '2018-03-15 06:08:18, lets play']
Run Code Online (Sandbox Code Playgroud)
注意:如果日期之前不能有空格,则在 Python 3.7 及更高版本中您可以使用r"\s*(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)"(注意*带有量词的量词\s*将允许零长度匹配)。对于旧版本,您需要使用@blhsing 建议的解决方案或安装PyPi 正则表达式模块r"(?V1)\s*(?=\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}\b)"并与regex.split.
| 归档时间: |
|
| 查看次数: |
24944 次 |
| 最近记录: |