模式匹配句子中的多个值

0x0

我有一个具有特定格式的句子。

<subject> <action> <object> @ <price> ... // The sentence can continue

我想从句子中提取这些值。

限制条件:

  • 主题总是BobAlice
  • 动作是boughtsold
  • 该对象可以是1-7个字母的任何单词//4apples应该返回NULL
  • 价格是浮点数/整数
  • 之前可以有句子,subject但不能包含Bob/Alice
  • 之后可能有空格,也可能没有 @

例:

Hi there, Bob sold apples @2.0 dollars each

所需输出:

Subject: Bob
Action: sold
Object: apples
Price: 2.0

目前,我通过以下方式天真地做到这一点:

#!/usr/bin/env python3

sentence = "Hi there, alice sold apples @2.0 dollars each"

sentence = sentence.lower()

if 'alice' in sentence or 'bob' in sentence:

    s_list = sentence.split(" ")
    s_idx = -1

    if 'bob' in sentence:
        s_idx = s_list.index('bob')
    elif 'alice' in sentence:
        s_idx = s_list.index('alice')

    if s_idx > -1:
        Subject = s_list[s_idx]
        Action = s_list[s_idx+1]
        Object = s_list[s_idx+2]  #more if/else to validate Object contraints
        Price = s_list[s_idx+3]   #more if/else to extract 2.0 if we get @2.0 

    print("Subject: {}, Action: {}, Object: {}, Price: {}".format(Subject, Action, Object, Price))

我该如何做得更好?可能使用re

缺口

您可以对每个元素使用带有命名捕获组的正则表达式:

import re

sentence = "Hi there, alice sold apples @2.0 dollars each"

values = re.search('(?P<subject>bob|alice)\s+(?P<action>bought|sold)\s+(?P<object>[A-Za-z]{1,7})\s+@\s*(?P<price>\d+(?:\.\d+)?)', sentence)
if values:
    Subject = values['subject']
    Action = values['action']
    Object = values['object']
    Price = values['price']
    print("Subject: {}, Action: {}, Object: {}, Price: {}".format(Subject, Action, Object, Price))   

这将输出

Subject: alice, Action: sold, Object: apples, Price: 2.0

注意,您可能需要提供re.I标志以re.search允许bobBob(或Soldsold等)被匹配;在这种情况下,您可以取代[A-Za-z]object与捕获组[a-z]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模式匹配多个变量

来自分类Dev

模式匹配变量的值

来自分类Dev

使用模式更改矩阵中的多个值

来自分类Dev

在R中,如何使用模糊匹配来搜索多个模式?

来自分类Dev

R中的多个字符串/模式匹配

来自分类Dev

在Java中的多个括号模式匹配方面需要帮助

来自分类Dev

如何在bash中匹配零个或多个模式实例?

来自分类Dev

使用Java Regex查找句子中的多个匹配词

来自分类Dev

正则表达式可在句子中多次匹配特定模式

来自分类Dev

在SQL中匹配多个键/值对

来自分类Dev

Scala模式与元组匹配:在元组中匹配相等的值

来自分类Dev

如何匹配Lua中的句子

来自分类Dev

Python:将字典值中的短语匹配到句子(字典键)并根据匹配结果输出

来自分类Dev

在R中的多个列中删除与符号/模式匹配的行

来自分类Dev

Postgres:匹配联接表中的多个值

来自分类Dev

替换与多个不同模式匹配的列值

来自分类Dev

匹配R中字符串中的多个模式

来自分类Dev

如果匹配多个模式,则从列表中滤除元素

来自分类Dev

匹配句子中的连续单词

来自分类Dev

使用条件匹配一行中的多个模式

来自分类Dev

多个模式匹配后替换数据表列中的多个值

来自分类Dev

在Excel中匹配多个值

来自分类Dev

Perl匹配句子中的确切值

来自分类Dev

如何匹配特定列中的多个模式?

来自分类Dev

多个名称匹配模式

来自分类Dev

索引/匹配功能中的多个值求和

来自分类Dev

如果数组值位于句子的最后位置,则从数组值中删除匹配的字符

来自分类Dev

在段落模式中匹配来自“模式文件”的多个模式

来自分类Dev

匹配句子中以模式结尾的单词

Related 相关文章

热门标签

归档