如何在 python 中使用正则表达式形成单独的块?

How do I form separate blocks using regular expressions in python?

这是我的代码:

results = re.finditer(r'([A-Z ?]+)\n+(.*)\n',inputfile,flags=re.MULTILINE)

for match in results:

    print match.groups()

i/p:

基本信息

姓名:约翰

Phone号码:+91-9876543210

出生日期:21-10-1995

技能组合

Java

Python

o/p: ('BASIC INFORMATION', 'Name: John') ('SKILL SET', 'Java')

但需要o/p: ('BASIC INFORMATION', 'Name: John', 'Phone No.: +91-9876543210', 'DOB': '21-10-1995') ('SKILL SET', 'Java','Python')

re.MULTILINE 替换为 re.DOTALL 以便您的 .* 匹配多行(是的,标志名称有些误导)。您还需要在 \n.

上拆分结果字符串

一般来说,使用正则表达式来完成这个任务可能不是最好的主意,这应该更好:

import string
results = []
for line in inputfile.splitlines():
  if all(c in (string.ascii_uppercase + ' ') for c in line):
    results.append([ line ])
  elif line != '':
    results[-1].append(line)

很难用正则表达式获得所有输出,因为你的文件文本不简单。

但是正则表达式 + 一点额外的努力,你可以轻松实现这个

# This regex fetch all Titles (i.e. BASIC INFO, SKILL SET...)
results = re.findall(r"([A-Z ]{4,})", inputfile) 

And After little work will help you to get your desired result

items=[]
for z in results:
    item = inputfile[:inputfile.index(z)]
    inputfile = inputfile.replace(item,'')
    if item:
      items.append(filter(str,item.split('\n')))
items.append(filter(str,inputfile.split('\n')))
print items


OUTPUT:
[ ['BASIC INFORMATION', 'Name: John', 'Phone No.: +91-9876543210', 'DOB': '21-10-1995'],
     ['SKILL SET', 'Java',' Python']
]