【问题标题】:How can I modify this RegEx pattern to capture the info I want?如何修改此 RegEx 模式以捕获我想要的信息?
【发布时间】:2016-07-25 11:26:27
【问题描述】:

这是我的正则表达式模式:\b\d+\w{0,2}\s\w+(\s\w+)?\b

我正在尝试捕获以下测试地址中的街道编号、街道名称和街道类型:

N1 2XQ, Flat 2, 325 Upper Street, London
SE15 1TX, 1 Penarth Street, London
KT9 2EY, 158 Bridge Road, Chessington, Surrey
NW10 4HP, 32AB Springwell Avenue, London
SW6 4DP, 16 St Maur Road, London
SW6 6NZ, Flat 19 Elm Lodge, 75 Stevenage Road, London
KT11 2BT, 11 Fairbourne, Cobham, Surrey
SW6 4BS, 24 Crondace Road, London
KT12 3LJ, 3b Ambleside Avenue, Walton on Thames
SW9 0NR, 66 Cranworth Gardens, London
FLat 5, 12 Ellerker Gardens
SW17 7JN, Flat F23, Du Cane Court, Balham High Road, Balham, London
1 Aragon Close, Enfield, Middlesex, EN2 8WL
SW16 4JF, 34 Norbury Rise, London

问题:它也匹配某些邮政编码。我不明白为什么,因为我指定我的 RegEx 模式以数字开头。我还希望能够在以下地址中捕获破折号和单位编号:

121-135 Green Lanes

【问题讨论】:

  • 你尝试使用什么正则表达式来匹配破折号?
  • 你能提供一个期望结果的样本吗?
  • 您使用什么平台/引擎/语言?
  • @ravp 如果你使用 C#,你最好用逗号分割文件,然后对你得到的单个元素进行正则表达式。您的文件中有太多例外,无法将其用作正则表达式。
  • @ravp 我说这些条目很奇怪,因为它们没有一致的模式。例如。大多数条目都以单词为前缀,后跟逗号。前缀集对我来说看起来像是一个标识符,但对于 1 Aragon Close... 条目,它没有该前缀。机器很难解释这一点,你也不是不可能。只需要对这些极端情况进行额外处理。我认为不是对所有人都使用 1 个正则表达式,而是一个一个地处理条目会是一种更好的方法。

标签: c# regex


【解决方案1】:

如 cmets 部分所述。输入格式错误,因此我们需要捕获的内容有点不清楚。如果文件被逗号正确吐出,则下面的正则表达式只需要捕获逗号内的内容 - 不包括逗号。

/(?<=\,).+?(?=,)/

在这里测试过:rublar.com

编辑:也试过这样,但你不能涵盖所有的变化。

\s+\d[0-9]+(?:\w+)?\s+\w+\s((:?\w+)?){0,2}(?=\,)

【讨论】:

  • /(?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多