【问题标题】:Python Regular Expression loopPython正则表达式循环
【发布时间】:2012-10-01 20:58:57
【问题描述】:

我有这段代码,它将在文件中查找某些内容。该文件如下所示:

name;lastname;job;5465465
name2;lastname2;job2;5465465
name3;lastname3;job3;5465465

这是python代码:

import re
import sys

filehandle = open('somefile.csv', 'r')
text = filehandle.read()
b = re.search("([a-zA-Z]+);([a-z\sA-Z]+);([a-zA-Z]*);([0-9^-]+)\n?",text)
print (b.group(2),b.group(1),b.group(3),b.group(4))

不,它只会打印:

lastname;name;job;5465465

它应该先打印姓氏,所以我对组进行了此操作。现在我需要一个循环来打印这样的所有行:

lastname;name;job;5465465
lastname2;name2;job2;5465465
lastname3;name3;job3;5465465l

我尝试了所有类型的循环,但它并没有遍历整个文件......我需要怎么做?

必须通过 re 模块来完成。我知道它在 csv 模块中很容易;)

【问题讨论】:

  • 为什么需要使用re?好吧,你也可以使用 split 来分号分割。

标签: python regex search loops findall


【解决方案1】:

问题不在于循环,而在于您的正则表达式/捕获组模式。类 [a-zA-Z]+ 将不匹配“lastname3”或“lastname2”。此示例有效:

import re
import sys

for line in open('somefile.csv', 'r'):
    b = re.search("(\w+);(\w+);(\w*);([0-9^-]+)\n?",line)
    if b:
        print "%s;%s;%s;%s" % (b.group(2),b.group(1),b.group(3),b.group(4))

【讨论】:

    【解决方案2】:

    似乎您只是想重新排序您拥有的东西,在这种情况下,我不知道是否需要正则表达式。我相信以下内容可能有用:

    重新排序 = operator.itemgetter(1, 0, 2, 3)

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

    【讨论】:

    • 这似乎没有任何意义。
    【解决方案3】:

    你需要逐行处理文件。

    import re
    import sys
    
    with open('somefile.csv', 'r') as filehandle:
        for text in filehandle:
            b = re.search("([a-zA-Z]+);([a-z\sA-Z]+);([a-zA-Z]*);([0-9^-]+)\n?",text)
            print (b.group(2),b.group(1),b.group(3),b.group(4))
    

    您的文件有很好的分号分隔值,因此使用 split 或建议的 csv 库会更容易。

    【讨论】:

    • 欢迎。请记住,有比使用正则表达式更简单的方法。
    【解决方案4】:

    不需要re,但csv 做得很好:

    import csv
    with open('somefile.csv', 'r') as f:
        for rec in csv.reader(f, delimiter=';'):
            print (rec[1], rec[0], rec[2], rec[3])
    

    如果您想检查单个元素的有效性(有效的电话号码、姓名中没有数字、大写姓名等),您可以使用re

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2017-07-07
      • 2011-01-27
      相关资源
      最近更新 更多