正则表达式(regex)保存senten的部分内容

2024-09-29 19:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

对于python和正则表达式,我一直在尝试找到一种方法来解析一个句子,这样我就可以把它的一部分分配给它们自己的变量。你知道吗

一个例子是:劳拉·康普顿,一位来自加利福尼亚州洛杉矶的股票经纪人

我的目标是:name=“Laura Compton”(这是最简单的一个,我可以瞄准锚链没有问题),position=“Stock Broker”,city=Los Angeles,state=California

我需要迭代的所有句子都遵循相同的模式,名称总是在锚定标记中,位置总是跟随,在结束锚定之后,有时它使用“a”或“an”,所以我想去掉这些。城市和国家总是遵循“从”这个词。你知道吗


Tags: 方法namecity目标stock经纪人positionbroker
2条回答

您可以在模式中使用命名组来捕获子字符串,这使得引用子字符串更容易,而且这样做的代码更可读:

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你应该退房。你知道吗

你可以试试这个:

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 '}

相关问题 更多 >

    热门问题