如何在 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']
]
这是我的代码:
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']
]