python - 您可以将列表成员的实例放入正则表达式中以在 python 中进行匹配吗?

标签 python regex list parsing pattern-matching

所以本质上我试图从一个目录中的多个文件中读取行,并使用正则表达式来专门查找某种时间戳的开头,我还想在正则表达式中放置一个月份列表的实例,然后根据每个月出现的次数创建一个计数器。我下面有一些代码,但它仍在进行中。我知道我关闭了 date_parse,但这就是我问的原因。如果您能想到更有效的方法,请留下其他建议。谢谢。

months = ['Jan','Feb','Mar','Apr','May','Jun',\
          'Jul','Aug','Sep','Oct','Nov','  Dec']
date_parse = re.compile('[Date:\s]+[[A-Za-z]{3},]+[[0-9]{1,2}\s]')
counter=0
for line in sys.stdin:
    if data_parse.match(line):
        for month in months in line:
            print '%s %d' % (month, counter)

最佳答案

在正则表达式中,您可以有一个替代模式列表,使用竖线分隔。

http://docs.python.org/library/re.html

from collections import defaultdict

date_parse = re.compile(r'Date:\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)')

c = defaultdict(int)

for line in sys.stdin:
    m = date_parse.match(line)
    if m is None:
        # pattern did not match
        # could handle error or log it here if desired
        continue # skip to handling next input line
    month = m.group(1)
    c[month] += 1

一些注意事项:

  • 我建议您使用原始字符串(带有 r''r"")作为模式,这样反斜杠就不会变成字符串转义符。例如,在普通字符串中, \s 不是转义符,您将得到一个反斜杠,后跟一个 's',但 \n 是一个转义符,您将得到获取单个字符(换行符)。

  • 在正则表达式中,当您将一系列字符括在方括号中时,您将获得与任何字符匹配的“字符类”。因此,当您输入 [Date:\s]+ 时,您将匹配 Date:,但也会匹配 taD:e 或任何其他组合那些角色。完全可以放入一个与其自身匹配的字符串,例如 Date:

关于python - 您可以将列表成员的实例放入正则表达式中以在 python 中进行匹配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118032/

相关文章:

python - 交替字符串大小写的问题

c# - 检查字符串是否包含 ip 地址

regex - sparql 精确匹配正则表达式

javascript - 如何在输入搜索框清除时隐藏搜索结果?请只使用 JavaScript

c# - 向基于模型的列表添加值

Python - 基于行值的乘法

python - 使用 Python 从剪贴板解析 XML

python - Python数组中的浮点精度

regex - 如何在 AWK 中填写 CSV 中的空单元格?

.net - 带有事件的集合 - 还有比 BindingList(of T) 更好的选择吗?