注意:我擅长正则表达式,但我是Python新手。我已经尝试了尽可能广泛的阅读,但找不到适合我的情况的解决方案,所以我在问这个问题。
我希望完成以下任务:
我使用这种代码取得了一些成功,这使我能够成功打印匹配行。总共有大约六个小时的Python经验,我感到非常高兴。
import re
def main():
regex = re.compile("regex")
with open("text_file.txt") as f:
for line in f:
result = regex.findall(line)
if result == None:
continue
elif result == []:
continue
else:
print(f, result, line)
main()
We used to call Bob "Little Bobby"
我的正则表达式“鲍勃(by)?”将匹配“鲍勃”和“鲍比”。但是我的代码会打印出这样的内容(如果我没记错的话)。
<_io.TextIOWrapper name='text_file.txt' mode='r' encoding='UTF-8'> [('Bob', ''), ('Bobby', ('by')) We used to call Bob "Little Bobby"
相反,我希望它打印两行(一行用于“ Bob”匹配,另一行用于“ Bobby”匹配。如果我没记错的话,这可以在grep中相对容易地完成,但是我找不到任何有用的方法在重新模块文档中。
- 循环浏览文件夹中的所有文本文件(有时我可能会使用.docx / xml文件,但我会找出细节)。我怀疑这是一个反复的问题,但是在这里我不知道该怎么做;
是,您需要进行迭代。我建议根据需要使用os.listdir
或os.listdir
。
示例:
glob.glob
- 搜索正则表达式或文件中包含的正则表达式列表(与地名词典一样,最好存储在外部.txt或.csv文件中;
我建议使用glob.glob
或import glob
for filename in glob.glob('/path/to/my/dir', '*.txt'):
print(filename)
# do other stuff with filename
。
示例:
re.findall
要从比赛中提取组,您需要使用re.findall
功能。
- 打印(或最好将其写入CSV或Pandas)文件的名称,找到的匹配项以及包含后者的文本行。理想情况下,它们将放在电子表格的不同列中,因此它们可以是逗号分隔的值,但是字典也可以使用。
您可以将所有数据加载到re.finditer
s的Python re.finditer
中,然后使用import re
my_re = re.compile('whatever your regex is')
with open(filename) as f:
file_contents = f.read()
for match in my_re.findall(file_contents):
print(match)
# do whatever you want with the match here
库将其输出到CSV。
示例:
.groups