【问题标题】:Using regex with python to find unique number format使用正则表达式和 python 来查找唯一的数字格式
【发布时间】:2016-06-07 14:16:14
【问题描述】:

我有一个非常大的文本文件(45000 行),其中 ID # 的格式为 4 或 5 个数字,后跟 2 或 3 个数字,最后有时是一个字母。

示例格式:

XXXX-XX XXXXX-XX ,XXXXX-XXw, XXXXX-XXw, XXXXX-XXww

((其中 w 是一个字母,X 是一个数字))

大多数值的格式为#####-## 或####-##,但大块的末尾有 1 个或多个字母。

我想要做什么:每当有一个值末尾有一个字母时,我想将它存储在字典中并跟踪与正常格式不同的字母的所有唯一值,然后打印出来字典。

因此对于以下值:11111-12s 或 1111-12a 或 11234-24b 我想存储字母值 (s, a , b) 并查看差异。我目前只显示值并重复:

import re

sampleFile = open("Sample.txt", "r")

#regEX formats
sample = re.compile(r'(\d{4,5}-\d\d\w{1,4})')

for line in sampleFile:
    sampleNum = sample.findall(line)
    for word in sampleNum:
        print word

我将如何针对正则表达式的 w{1,4} 部分的唯一值并将它们存储在字典中?

编辑:当我在上面运行时,这是我得到的数字示例:

12647-01a 12627-02R 12606-01a 12588-02a 12583-01S 12583-01R

所以末尾的那些值会有所不同,我只想将结尾字母(有时有 2 个或更多)存储在字典或集合中。希望这会有所帮助

【问题讨论】:

  • 你能澄清一下你的意思吗?你想要s -> [1111-12], a->[1111-12], b->[11234-24]1111-12->[s,a], 11234-24->[b] 之类的东西吗?
  • 格式为 11111-12 和 3424-32,但有时末尾有一个字母,如 23242-32s 或 34343-23b 或 2234-22a 或有时 2 个字母 14343-32RA 等。对于字母部分,并且只有字母部分,我想存储这些唯一值/条目,然后打印所述值。有很多变体(a、b、ba、c、R、RA、s、aaa 等)我只想知道最后的字母以及发生了多少独特的变体。明白了吗?
  • this好吗?
  • 我是这样写的:sample1 = re.compile(r'(\d{4,5}-\d{2,3}[^\s]+)') 我没有为此返回的值,也许我没有正确输入?

标签: python regex dictionary format set


【解决方案1】:

读取您的正则表达式的简单集合应该与您澄清的评论相匹配:

import re
uniq = set()
with open('Sample.txt') as fin:
    for line in fin:
        ma = re.search(r'(\w{1,4})$', line)
        if not ma:
            continue
        uniq.add(ma.group(1))

print(uniq)

【讨论】:

  • 组部分在做什么 ma.group(1,2) ?出现运行时错误:IndexError: no such group
  • 值存储在uniq。如果要查看值,请添加 print(uniq)
  • 这正是我所需要的!但它最后也只打印数字,但总的来说它让一切变得更容易,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2011-05-09
相关资源
最近更新 更多