Python 文本处理:如何从字符串列表中提取正确的字段?

Python 文本处理:如何从字符串列表中提取正确的字段?,python,regex,text-processing,Python,Regex,Text Processing,我想从content\u列表中提取六个字段,并将它们放入数据框中。字段为:Seq#,名称,编码说明,目标值,选择,以及支持定义。但是,我必须获取元数据对象的正则表达式没有给我Seq#对于列表中的每个项目,缺少一些其他项目,因此当我去子集它时,它会给我一个索引超出范围的错误。我不确定我做错了什么。你能帮助我吗?谢谢大家! import re import pandas as pd content_list = ['\nSeq. #:\n2031', 'Name:\nSSN N/A\nThe v

我想从
content\u列表中提取六个字段
,并将它们放入数据框中。字段为:
Seq#
名称
编码说明
目标值
选择
,以及
支持定义
。但是,我必须获取元数据对象的正则表达式没有给我
Seq#对于列表中的每个项目,缺少一些其他项目,因此当我去子集它时,它会给我一个索引超出范围的错误。我不确定我做错了什么。你能帮助我吗?谢谢大家!

import re 
import pandas as pd

content_list = ['\nSeq. #:\n2031', 'Name:\nSSN N/A\nThe value on arrival at this facility\nTarget Value:\nSelection Text\nDefinition\nNo\nYes\nSelections:\n(none)\nSupporting Definitions:\nIndicate the number created and automatically inserted by the software that uniquely identifies this patient.\nCoding Instructions:\nOnce assigned to a patient at the participating facility, this number will never be changed or reassigned to a different patient. If the \npatient returns to the same participating facility or for followup, they will receive this same unique patient identifier.\nNote(s):', '\nSeq. #:\n2040', 'Name:\nNCDR Patient ID\nThe value on arrival at this facility\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\nAn optional patient identifier, such as Medical Record Number, that can be associated with the patient.\nCoding Instructions:\nThis element is referenced in The Joint Commission AMI Core Measures, AMI-1 through AMI-5. AMI-7, 7a, 8, 8a and AMI-9.\nNote(s):', '\nSeq. #:\n2045', "Name:\nOther ID\nN/A\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\nIndicate the patient's date of birth.\nCoding Instructions:\nThis element is referenced in The Joint Commission AMI Core Measures, AMI-1 through AMI-5. AMI-7, 7a, 8, 8a and AMI-9.\nNote(s):", '\nSeq. #:\n2050', "Name:\nBirth Date\nThe value on arrival at this facility\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\n© 2007, American College of Cardiology Foundation\n3/31/2014\nPage 2 of 137\nEffective for Patient Discharges January 01, 2015\nCoder's Data Dictionary\nNCDR® ACTION Registry®-GWTGŽ v2.4\nA. Demographics\nIndicate the patient's sex at birth.\nCoding Instructions:\nThis element is referenced in The Joint Commission AMI Core Measures, AMI-1 through AMI-5. AMI-7, 7a, 8, 8a and AMI-9.\nNote(s):", '\nSeq. #:\n2060', 'Name:\nSex\nThe value on arrival at this facility\nTarget Value:\nSelection Text\nDefinition\nMale\nFemale\nSelections:\n(none)\nSupporting Definitions:\nIndicate if the patient is White.\nCoding Instructions:\nIf the patient has multiple race origins, specify them using the other race selections in addition to this one.\nThis element is referenced in The Joint Commission AMI Core Measures, AMI-1 through AMI-5. AMI-7, 7a, 8, 8a and AMI-9.\nNote(s):', '\nSeq. #:\n2070', 'Name:\nRace - White\nThe value on arrival at this facility\nTarget Value:\nSelection Text\nDefinition\nNo\nYes\nSelections:\nWhite (race)\n:\nHaving origins in any of the original peoples of Europe, the Middle East, or North Africa.\nSource:\nU.S. Office of Management and Budget. Classification of Federal Data on Race and Ethnicity\nSupporting Definitions:\nIndicate if the patient is Black or African American.\nCoding Instructions:\nIf the patient has multiple race origins, specify them using the other race selections in addition to this one.\nThis element is referenced in The Joint Commission AMI Core Measures, AMI-1 through AMI-5. AMI-7, 7a, 8, 8a and AMI-9.\nNote(s):','\nSeq. #:\n1040', 'Name:\nTransmission Number\nN/A\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\nVendor Identification (agreed upon by mutual selection between the vendor and the NCDR) to identify software vendor. Vendors \nmust use consistent name identification across sites. Changes to Vendor Name Identification must be approved by the NCDR.\nCoding Instructions:', '\nSeq. #:\n1050', "Name:\nVendor Identifier\nN/A\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\nVendor's software product name and version number identifying the software which created this record (assigned by vendor). \nVendor controls the value in this field. Version passing certification/harvest testing will be noted at the NCDR.\nCoding Instructions:", '\nSeq. #:\n1060', "Name:\nVendor Software Version\nN/A\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\n© 2007, American College of Cardiology Foundation\n3/31/2014\nPage 136 of 137\nEffective for Patient Discharges January 01, 2015\nCoder's Data Dictionary\nNCDR® ACTION Registry®-GWTGŽ v2.4\nZ. Administration\nThe NCDR Registry Identifier describes the data registry to which these records apply. It is implemented in the software at the time \nthe data is collected and the records are created. This is entered into the schema automatically by software.\nCoding Instructions:", '\nSeq. #:\n1070', 'Name:\nRegistry Identifier\nN/A\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\nRegistry Version describes the version number of the Data Specifications/Dictionary, to which each record conforms. It identifies \nwhich fields should have data, and what are the valid data for each field. It is the version implemented in the software at the time \nthe data is collected and the records are created. This is entered into the schema automatically by software.\nCoding Instructions:', '\nSeq. #:\n1080', 'Name:\nRegistry Version\nN/A\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\nReserved for future use.\nCoding Instructions:', '\nSeq. #:\n1200', "Name:\nAuxiliary 0\nN/A\nTarget Value:\n(none)\nSelections:\n(none)\nSupporting Definitions:\n© 2007, American College of Cardiology Foundation\n3/31/2014\nPage 137 of 137\nEffective for Patient Discharges January 01, 2015\nCoder's Data Dictionary\nNCDR® ACTION Registry®-GWTGŽ v2.4\nZ. Administration"]

sequence_list = []
metadata = []
for i in content_list:
    metadata = list(filter(None, re.split("\s*(?:Seq. #:|Name:|Coding Instructions:|Target Value:|Selections:|Supporting Definitions:)\s*", i)))
    sequence_list.append([metadata[0], metadata[1], metadata[2], metadata[3], metadata[4], metadata[5]])

df = pd.DataFrame(sequence_list, columns = ['Seq #:','Name','Coding Instructions','Target Value','Supporting Definitions','Selections'])
df['Seq #:'] = df['Seq #:'].astype(int)
df.head()


您可以使用换行符连接
content\u list
中的项目,然后使用双换行符拆分生成的字符串以获得段落,稍后可以使用匹配的正则表达式(如

pattern=r'(?s)^Seq\:\s*(.*)\n名称:\s*(.*)\n目标值:\s*(.*)\n选项:\s*(.*)\n支持定义:\s*(.*)(::\n编码说明:\s*(.*))?$'
看。似乎
编码指令
可能会丢失,因此在正则表达式中它是可选的

Python演示:

sequence\u list=[]
图案=r'^Seq\。#\s*(.*)\n名称:\s*(.*)\n目标值:\s*(.*)\n选项:\s*(.*)\n支持定义:\s*(.*)(::\n编码说明:\s*(.*))?$'
对于re.split(r'\n{2,}','\n'.join(content_list))中的i:
m=re.match(模式,i.strip(),re.S)
如果m:
sequence_list.append(m.groups())
df=pd.DataFrame(序列列表,列=['Seq#:','Name','Coding Instructions','Target Value','Supporting Definitions','Selections'])

请注意,只有正则表达式匹配时,才会解析每个段落,如果匹配,则稍后将使用匹配的
.groups()
数据填充数据框。

感谢您的回复。我担心内容列表不能完全代表我的数据(我已经更新了它),因为当我运行您的代码时,我得到的数据帧的序号是正确的,但它与其余的数据帧有问题variables@Adri你的意思是数据中可以有
Note(s)
字段吗?可以,但我不看这些字段。例如,这是我得到的第一行:Seq#:2031,名称:“SSN N/A\N到达此设施时的值”,编码说明:选择文本\N定义\N否\N是,目标值:(无),支持定义:,选择:None@Adri那么你期待什么?@ AdRi,ReXEX,将考虑<代码>注释<代码>