Python 正则表达式循环



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

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-zsA-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 模块中很容易;)<</p>

div class="ans>

您需要逐行处理文件。

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

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

不需要

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

问题不在于循环,而在于您的正则表达式/捕获组模式。类 [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))

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

reorder = operator.itemgetter(1, 0, 2, 3)

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

最新更新