Python正则表达式循环

Python正则表达式循环,python,regex,search,loops,findall,Python,Regex,Search,Loops,Findall,我有这个代码,它将在文件中查找某些内容。该文件如下所示: name;lastname;job;5465465 name2;lastname2;job2;5465465 name3;lastname3;job3;5465465 lastname;name;job;5465465 lastname2;name2;job2;5465465 lastname3;name3;job3;5465465l 这是python代码: import re import sys filehandle = ope

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

name;lastname;job;5465465
name2;lastname2;job2;5465465
name3;lastname3;job3;5465465
lastname;name;job;5465465
lastname2;name2;job2;5465465
lastname3;name3;job3;5465465l
这是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
它应该先打印姓氏,所以我用分组的方式。现在我需要一个循环来打印所有行,如下所示:

name;lastname;job;5465465
name2;lastname2;job2;5465465
name3;lastname3;job3;5465465
lastname;name;job;5465465
lastname2;name2;job2;5465465
lastname3;name3;job3;5465465l
我尝试了所有的循环,但它没有通过整个文件。。。我需要怎么做


这必须通过re模块完成。我知道在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

您需要逐行处理文件

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库就更容易了。

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

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


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

为什么需要使用re?嗯,你也可以用分号来拆分。这似乎没有任何意义。欢迎。请记住,有比使用正则表达式更简单的方法来实现这一点。