gpt4 book ai didi

c# - 三种地址的正则表达式

转载 作者:太空狗 更新时间:2023-10-29 21:52:40 25 4
gpt4 key购买 nike

我有 3 种不同的地址模式:

Avenue T, 55 - Sumiton, AL - USA
Avenue T - Sumiton, AL - USA
Sumiton, AL - USA

这意味着:[地址][,][数字][-][县][,][州][-][国家]

我正在尝试使用此正则表达式但无法正常工作:

(?<street>.*\,)(?:\s*(?<number>[1-9][0-9]*))?\s*(?<county>.*\,)?\s*(?<State>.*\-)?\s*(?<Country>.*)

Regex tester

有什么帮助吗?型

最佳答案

你的三种模式可以这样描述

${street}, ${number} - ${county}, ${State} - ${Country}
OPTIONAL OPTIONAL OBLIGATORY OBLIGATORY OBLIGATORY

你可以使用

^(?!$)(?<street>.*?(?=(?:,\s*\d+)?\s*-\s*\w+,))?(?:,\s*(?<number>[1-9][0-9]*))?\s*(?:-\s*)?(?<county>[\w\s]+),\s*(?<State>[A-Z]{2})\s*-\s*(?<Country>.*)$

如果您需要从多行字符串中提取它们,请使用

(?m)^(?!\r?$)(?<street>.*?(?=(?:,\s*\d+)?\s*-\s*\w+,))?(?:,\s*(?<number>[1-9][0-9]*))?\s*(?:-\s*)?(?<county>[\w\s]+),\s*(?<State>[A-Z]{2})\s*-\s*(?<Country>.*)\r?$

参见 regex demo .结果:

enter image description here

因此,只有在后面有一个强制性县组的可选数字组时,才会填充街道组。

详情

  • ^ - 字符串/行的开始(如果使用 (?m))
  • (?!$)/(?!\r?$) - 防止空字符串/行匹配的否定前瞻
  • (?<street>.*?(?=(?:,\s*\d+)?\s*-\s*\w+,))? - 组“街道”:任何 0+ 个字符,尽可能少,直到可选序列 , , 0+ 个空格,1+ 个数字,然后是一个 -包含 0+ 个空格、1+ 个单词字符和 ,
  • (?:,\s*(?<number>[1-9][0-9]*))? - 可选的非捕获组匹配 , , 0+ 个空格,然后将 1 中的一个数字捕获到组“编号”中至 9然后是任何 0+ 数字
  • \s*(?:-\s*)?(?<county>[\w\s]+) - 0+ 个空格,一个可选的连字符序列,然后是 0+ 个空格,然后将任何 1+ 个单词和空格字符捕获到“county”组中
  • ,\s*(?<State>[A-Z]{2}) - 一个逗号,0+ 个空格,然后捕获到“状态”组中的 2 个大写字母
  • \s*-\s* - 用 0+ 个空格括起来的连字符
  • (?<Country>.*) - “国家”组:尽可能多的除 LF 之外的任何 0+ 个字符
  • $ - 字符串/行的开头。

关于c# - 三种地址的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58304385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com