【问题标题】:How do I form separate blocks using regular expressions in python?如何在 python 中使用正则表达式形成单独的块?
【发布时间】:2017-06-14 09:57:15
【问题描述】:

这是我的代码:

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

for match in results:

    print match.groups()

我/p:

基本信息

姓名:约翰

电话号码:+91-9876543210

出生日期:21-10-1995

技能组合

Java

Python

o/p: ('基本信息','姓名:约翰') ('技能集', 'Java')

但需要 o/p: (“基本信息”、“姓名:John”、“电话号码:+91-9876543210”、“出生日期”:“21-10-1995”) ('技能集'、'Java'、'Python')

【问题讨论】:

  • 您如何区分 SKILLSET 和 BASIC INFORMATION ?为什么这里需要正则表达式?
  • 我已经使用 ([A-Z ?]+)\n 来识别基本信息和技能组合。我想使用正则表达式制作两个单独的块,其中包含这两个标题下的信息。 @SarathSadasivanPillai

标签: python regex resume


【解决方案1】:

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

但是正则表达式 + 一点点额外的努力,您就可以轻松实现这一目标

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

并且经过少量工作将帮助您获得想要的结果

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


输出
[ ['基本信息','姓名:John','电话号码:+91-9876543210','DOB':'21-10-1995'],
     ['技能设置','Java', 'Python']
]

【讨论】:

  • 嘿,我希望答案在两个不同的组中。 BASIC INFORMATION 包含姓名、DOB 和电话号码,以及包含 Java 和 Python 的 SKILL SET。
  • 技能集和基本信息是文件中的静态字符串吗?
  • 没有。它可以是任何东西。这只是一个示例数据集。
  • 好的,那么你需要一点额外的工作然后正则表达式来获得结果,因为你的文件并不简单!编辑后的答案看看吧!
  • 非常感谢!就像我想要的那样工作:)
【解决方案2】:

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)

【讨论】:

  • 如何在 \n 上拆分它?蟒蛇新手。还在摸索中。
  • 哦,等等,我假设所有非“节标题”的行都包含小写字母。 DOB: 21-10-1995 并非如此。
  • 它不工作。多次显示“无”。不过还是谢谢你!
  • 更多细节(即与您的期望不同)将按顺序排列。
  • 我使用 ([A-Z ?]+)\n 来识别基本信息和技能组合。我想使用正则表达式制作两个单独的块,其中包含这两个标题下的信息。使用上面的代码不会这样做。它只是多次打印“无”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2012-03-16
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多