【问题标题】:Regex to match a list of field:values正则表达式匹配字段列表:值
【发布时间】:2019-06-22 20:19:55
【问题描述】:

我正在编写一个基于查询搜索数据库的程序(用于 python 家庭作业)

查询的格式如下(任意字段名称) 字段:值 并且多个用逗号隔开

EG

姓名:乔治·布什,地址:1234, b-street,电子邮件:email@email.com

我需要提取字段和值

我一直在使用不同的正则表达式,但我是普通人

现在我的“最佳”正则表达式是:([\w@ -]+): *([\w@ -]+)

但这不能正确捕获带有逗号的值,并且可能会丢失任意字符

这里有更多我想要的行为的例子

查询:“姓名:乔治·布什”

匹配:“姓名”、“乔治·布什”


查询:“地址:1234,街道街道”

匹配:'地址','1234,街道'


查询:“姓名:乔治·布什,地址:1234, street street, f13ldna-me:---”

Match1:“姓名”、“乔治·布什”

Match2:'地址','1234,街道'

Match3: 'f13ldna-me' , '---'

【问题讨论】:

  • 你如何确定你有一个新的标识符?比如"Name: George Bush, Address: xxx"的情况下:前面有没有字符?
  • 我认为预期的行为是逗号字符的存在让您知道另一个标识符字符即将到来。我认为他们没有意识到某些字段(例如地址)包含逗号我决定违反分配描述并仅使用指定的分隔符';'
  • @JeremiahGelb 您能否在添加分隔符时使用示例数据和预期匹配更新​​问题?
  • 我让它与分隔符一起工作。我不会用分隔符更新问题。没有分隔符,您的答案效果很好

标签: regex python-3.x


【解决方案1】:

要从示例数据中获取匹配项,您可以使用不匹配空格字符的 negated character class: 来匹配字段,因为示例数据中不包含空格。

对于值部分,您还可以使用与 : 不匹配的否定字符类,然后匹配逗号和 0+ 空白字符或断言字符串的结尾。

([^\s:]+):\s*([^:]+)(?:,\s*|$)

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多