首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代检索到的文件中的数据以提取各种值

迭代检索到的文件中的数据以提取各种值
EN

Stack Overflow用户
提问于 2014-08-11 19:38:47
回答 1查看 92关注 0票数 2

我正在搜索一个文本文件(示例文件如下所示),并试图从每个组中选择各种数据。例如,我希望从每个组中选择“随机文本-x”数据、"findMe“文本以及来自每个组的数字(例如来自A组"100-012”和"499-217"),尽管每个组中的数字计数是未知的。

代码语言:javascript
复制
EXAMPLEFILE.TXT:
 1. [**] random text group A [**]
 2. random number of lines of text 
 3. findMe
 4. stufff...100-012 qwerty...499-217


 5. [**] random text group B [**]
 6. random lines of text 
 7. findMe


 8. [**] random text group C [**]
 9. random number of lines of text 
10. findMe
11. stufff...223-300 qwerty...888-888 zzzz...333-444

12. [**] continues......

我的代码显示在最后,但它只输出:

random text-A findMe ['100-012', '499-217', '223-300', '888-888', '333-444']

我真的在努力找出我哪里出了问题。任何帮助都是非常感谢的,谢谢。

代码语言:javascript
复制
import re

def patternMatching(group, line):
    section = re.findall(group, line)     
    for i in section:
        randText = re.search('\]\s(.*?)\[', i)
        result1 = randText.group(1)
        print result1
        findMe = re.search('findMe', line)
        result2 = findMe.group()
        print result2
        numbers = re.findall('(\d{3}\-\d{3})',line)
        print numbers

randomTextgroup = re.compile(r'\*{2}\].*\[\*{2}\].*\[\*{2}\]', re.DOTALL|re.S)
with open ("C:/Location/test.txt", 'r') as txt:
    data=txt.read().replace('\n','\r')
    a = randomTextgroup.findall(data)
    for i in a:
        patternMatching(randomTextgroup, i)

我想得到的输出是:

代码语言:javascript
复制
random text group A
findMe
100-012 499-217

random text group B
findMe

random text group C
fineMe
223-300 888-888 333-444

对于一组数字,我并不介意它是“223-300”、“888-888”、“333-444”还是一个元组--只要它被分组,我就可以使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-12 08:38:07

我终于得到了!:)谢谢你的帮助和建议。事实上,主要的因素是regex (@ randomTextgroup)贪婪。然后,patternMatching()中的额外for循环导致循环中没有data...one太多。不管怎样,谢谢你:)

代码语言:javascript
复制
randomTextgroup = re.compile(r'\*{2}\].*?\[\*{2}\].*?(?=\[\*{2}\])')


with open ("C:Location/test.txt", 'r') as txt:


    data=txt.read().replace('\n','\r')


    section = randomTextgroup.findall(data)


    for i in section:

        randText = re.search('\]\s(.*?)\[', i)
        test = randText.group(1)
        print test

        findMe = re.search('findMe', i)
        result2 = findMe.group()
        print result2

        numbers = re.findall('(\d{3}\-\d{3})', i)
        print numbers, '\n'

这导致了以下产出:

代码语言:javascript
复制
random text-A 
findMe
['100-012', '499-217'] 

random text-B 
findMe
[] 

random text-C 
findMe
['223-300', '888-888', '333-444']

注:对于其他读者,输入文件保持不变(如在原始文章中所写)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25251055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档