社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

C.Nivs

C.Nivs 最近创建的主题
C.Nivs 最近回复了
6 年前
回复了 C.Nivs 创建的主题 » 如何在python中获取此正则表达式[duplicate]

你可以用 re.split 要在空格或冒号上拆分并获取第四个元素:

import re

somedate = "Sat Apr 18 23:22:15 PDT 2009"

re.split('\s|\:', somedate)
['Sat', 'Apr', '18', '23', '22', '15', 'PDT', '2009']

hour = re.split('\s|\:', somedate)[3]

你也可以这样拆:

day_of_week, month, day_of_month, hour, minute, second, timezone, year = re.split('\s|\:', somedate)

那会让你有更多的机会

否则,我将使用@liamhawkins关于datetime模块的建议

编辑:如果您正在寻找与 datetime 对象,可以使用 namedtuple collections 模块:

from collections import namedtuple

date_obj = namedtuple("date_obj", ['day_of_week', 'month', 'day_of_month', 'hour', 'minute', 'second', 'timezone', 'year'])

mydatetime = date_obj(*re.split('\s|\:', somedate))

hour = mydatetime.hour
6 年前
回复了 C.Nivs 创建的主题 » 如何在python的列表中找到输入的位置[副本]

更快的替代方案 list.index 你可以建造一个 dictionary of letter:索引对使用 enumerate :

yourlist = list('DRAGON')
yourdict = {letter: idx for idx, letter in enumerate(yourlist)}

guess = input('What letter do you want to guess?')
result = yourdict.get(guess.strip()) # Avoids KeyError on missing letters

if result is not None:
    print("You got it!", result)
else:
    print("Nope!")

对于短名单, 列表索引 完全没问题,你不会注意到 dict ,但对于非常长的列表,它会产生影响:

短名单

列表
python -m timeit -s 'x = list(range(50))' 'x.index(49)'
1000000 loops, best of 3: 0.584 usec per loop
迪克特
python -m timeit -s 'x = dict(enumerate(list(range(50))))' 'x.get(49)'
10000000 loops, best of 3: 0.0733 usec per loop

# at this level, you really won't notice the difference on a GHz processor 

长列表

列表
python -m timeit -s 'x = list(range(500000))' 'x.index(490000)'
100 loops, best of 3: 4.91 msec per loop
迪克特
python -m timeit -s 'x = dict(enumerate(list(range(500000))))' 'x.get(490000)'
10000000 loops, best of 3: 0.0884 usec per loop

注意,对于大量的项目, 迪克特 规模真的很好

6 年前
回复了 C.Nivs 创建的主题 » 在python日志中创建只包含属性而不包含消息的记录

为什么不能格式化你的日志字符串来获取额外的ARG?这个 extra Kwarg就是为了这个目的。从他们 docs :

FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logger = logging.getLogger('tcpserver')
logger.warning('Protocol problem: %s', 'connection reset', extra=d)

# which prints this
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset

额外的 是用于KWG映射,所以如果你想它为你构建一个字符串,它可以。“消息”是位置的,因此不能忽略它。但是,没有什么可以阻止您提供空字符串 '' 作为 message 位置参数

6 年前
回复了 C.Nivs 创建的主题 » python regex:最多有一个空格的字符串

可能更容易使用 re.split ,因为分隔符是已知的(2个或多个空格),但中间的模式不是。我相信有一个比我更擅长雷杰克斯的人可以解决这个问题,但是通过分开来解决。 \s{2,} ,您可以大大简化问题。

您可以这样编写命名组的字典:

import re
s = "a    b d d  c"

x = dict(zip('abc', re.split('\s{2,}', s)))

x
{'a': 'a', 'b': 'b d d', 'c': 'c'}

第一个arg在哪里 zip 是命名组。要将此扩展到更通用的名称,请执行以下操作:

groups = ['group_1', 'another group', 'third_group']
x = dict(zip(groups, re.split('\s{2,}', s)))

{'group_1': 'a', 'another group': 'b d d', 'third_group': 'c'}