正则表达式(正则表达式)保存句子的部分

时间:2017-11-28 23:02:12

标签: python regex python-3.x

python和正则表达式的新手,我一直试图找到一种方法,我可以解析一个句子,这样我就可以把它的一部分分配给它们自己的变量。

一个例句是:Laura Compton,来自加利福尼亚州洛杉矶的股票经纪人

我的目标是:姓名=" Laura Compton" (这个很容易,我可以针对锚链接没问题),position =" Stock Broker",city =洛杉矶,州=加州

我需要迭代的所有句子都遵循相同的模式,名称总是在锚标记中,位置始终跟在关闭锚之后,有时它的使用" a"或""所以我想剥掉那些。城市和州总是遵循"来自"

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

import re
s = "Laura Compton, a Stock Broker from Los Angeles, California"
new_s = re.findall('^[a-zA-Z\s]+|(?<=a\s)[a-zA-Z\s]+(?=from)|(?<=an\s)[a-zA-Z\s]+(?=from)|(?<=from\s)[a-zA-Z\s]+(?=,)|(?<=,\s)[a-zA-Z\s]+$', s)
headers = ['name', 'title', 'city', 'state']
data = {a:b for a, b in zip(headers, new_s)}

输出:

{'city': 'Los Angeles', 'state': 'California', 'name': 'Laura Compton', 'title': 'Stock Broker '}

答案 1 :(得分:1)

您可以在模式中使用命名组来捕获子字符串,这样可以更容易地引用子字符串,并且代码可以更具可读性:

import re

data = ['Laura Compton, a Stock Broker from Los Angeles, California',
        'Miles Miller, a Soccer Player from Seattle, Washington']

pattern = (r'^(?P<name>[^,]+)\, an? (?P<position>.+) from '
           r'(?P<city>[^,]+)\, +(?P<state>.+)')

FIELDS = 'name', 'position', 'city', 'state'

for sentence in data:
    matches = re.search(pattern, sentence)
    name, position, city, state = matches.group(*FIELDS)
    print(', '.join([name, position, city, state]))

从样本data生成的输出:

Laura Compton, Stock Broker, Los Angeles, California
Miles Miller, Soccer Player, Seattle, Washington

A.M。 Kuchling写了一篇名为Regular Expression HOWTO的好教程,你应该退房。