私信  •  关注

C.Nivs

C.Nivs 最近创建的主题
C.Nivs 最近回复了
5 年前
回复了 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
4 年前
回复了 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

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

5 年前
回复了 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 位置参数

4 年前
回复了 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'}