【问题标题】:Parsing Multiple Regular Expressions Performance解析多个正则表达式的性能
【发布时间】:2013-08-27 04:21:15
【问题描述】:

我正在尝试将经过验证的地址拆分为基本组成部分(单元编号、街道编号、街道名称等)。为此,我正在通过字符串向后(从右到左)工作:

  • 匹配 [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'-]+$))

注意:这是针对一种非常特殊的地址格式,专门针对我的需要。

【问题讨论】:

标签: .net regex vb.net performance


【解决方案1】:

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

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

然后检查Match.Groups 集合中您需要的部分。

【讨论】:

  • 天哪,我可以扇自己耳光。我完全忘记了团体。我使用命名组迅速将我的三种模式改写为一种模式。完美!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
相关资源
最近更新 更多