.net 解析多个正则表达式提高性能

.net 解析多个正则表达式提高性能,.net,regex,vb.net,performance,.net,Regex,Vb.net,Performance,我试图将已验证的地址拆分为基本组件(单元、街道、街道名称等)。为此,我通过字符串向后(从右到左)操作: 匹配[A-Z'-]个字符=>街道名称 匹配[\d-]+[A-Za-z]{0,1}=>街道编号(这与10-12或11B等内容匹配,只有0或1个字母) 将字符串的其余部分与单元号匹配 现在,我能够编写三个正则表达式模式来进行匹配。我不确定的是如何使用它们。这将用于地址的批处理 我的想法是: 在地址上运行每个模式,并在相应的地址对象属性上保存每个匹配项 在每一步之后,使用某种匹配/替换来缩短字

我试图将已验证的地址拆分为基本组件(单元、街道、街道名称等)。为此,我通过字符串向后(从右到左)操作:

  • 匹配[A-Z'-]个字符=>街道名称
  • 匹配[\d-]+[A-Za-z]{0,1}=>街道编号(这与10-12或11B等内容匹配,只有0或1个字母)
  • 将字符串的其余部分与单元号匹配
现在,我能够编写三个正则表达式模式来进行匹配。我不确定的是如何使用它们。这将用于地址的批处理

我的想法是:

  • 在地址上运行每个模式,并在相应的地址对象属性上保存每个匹配项
  • 在每一步之后,使用某种匹配/替换来缩短字符串(我将使用向前看和向后看)
任何关于如何最有效地使用正则表达式的建议都会非常有用

编辑 正如我建议的那样,我用小组来代替。如果有人想看看我的想法:

(?<unit>(.*))\s(?<number>([\d-]+[A-Za-z]{0,1}))\s+(?<name>([\sA-Za-z'-]+$))
(?(.*)\s(?([\d-]+[A-Za-z]{0,1}))\s+(?([\sA-Za-z'-]+$)

NB:这是一种非常特殊的地址格式,特定于我需要的内容。

正则表达式能够匹配整个字符串;只需将各部分括在括号内即可形成捕获组,例如:

^(\w*)\s*([\d-]+[A-Za-z]?)\s*(.+)$

然后检查所需零件的
Match.Groups
集合。

您可能会发现以下信息很有用:。德克萨斯州奥斯汀市有一个“E49 1/2 St”,根据出版物,街道号码也可以是小数。谢谢,但我不是美国的,我们有一个市场标准的地址验证产品,它在保存时会去掉x/y类型的地址(即使我们在这里写地址时也会使用)。哦,天哪,我可以打自己一巴掌。我完全忘记了团体。我使用命名组快速地将我的三个模式重写为一个。完美的