RegEx与街道前缀和通配符

时间:2013-05-29 23:12:38

标签: regex parsing street-address

我无法找出正在寻找的正确的正则表达式。基本上我需要的是以下内容。

如果用户搜索街道前缀(例如N W E S)并包含正则表达式忽略它的通配符(%,*)。我只希望正则表达式与N W E S一起使用。

那么如何编写正则表达式,如果你旁边有一个角色则忽略。这就是我到目前为止所拥有的。

^(N | S | W | E)\ B'/ P>

但它正在拿起N%和其他通配符......我也不想要它。

3 个答案:

答案 0 :(得分:1)

描述

此正则表达式仅匹配具有N,S,E,W的街道,后跟空格和更多文本或行尾。

^([nsew])\b(?:\s.*?)?$

enter image description here

  • 组0将收到整个匹配值
  • 第1组只会收到N,S,E或W

    N Wisconsin Drive S选民摊位 E Kitten Ave. W华盛顿街 诺格廷顿巷 银石驱动器 Edans高速公路 Wireware Waythrough

实施例

你没有指定语言,所以我选择PHP来演示正则表达式。

<?php
$sourcestring="N Wisconsin Drive
S Voter Booth
E Kitten Ave
W Washington Street
Noghtington Lane
Silver Stone Drive
Edans Expressway
Wireware Waythrough";
    Dim re As Regex = New Regex("^([nsew])\b(?:\s.*?)?$",RegexOptions.IgnoreCase OR RegexOptions.Multiline)
    Dim mc as MatchCollection = re.Matches(sourcestring)
    Dim mIdx as Integer = 0
    For each m as Match in mc
      For groupIdx As Integer = 0 To m.Groups.Count - 1
        Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames(groupIdx), m.Groups(groupIdx).Value)
      Next
      mIdx=mIdx+1
    Next
  End Sub
End Module

$matches Array:
(
    [0] => Array
        (
            [0] => N Wisconsin Drive
            [1] => S Voter Booth
            [2] => E Kitten Ave
            [3] => W Washington Street
        )

    [1] => Array
        (
            [0] => N
            [1] => S
            [2] => E
            [3] => W
        )

)

答案 1 :(得分:0)

在这种情况下,

^是字符串的开头而不是&#34;不是。&#34;你可以用负面的预测来做到这一点。

[NSWE](?!%|\*)

答案 2 :(得分:0)

从您的问题来看,听起来您允许用户输入搜索表达式。然后,您尝试通过将其直接传递到正则表达式函数来对搜索项进行操作。

如果用户输入N%期望查找N后跟%任意数量的字符,但正则表达式引擎只需查看%字符并尝试匹配它。您可以在将%用作正则表达式之前将其替换为.*,从而更正用户提供的搜索字词:

  • .*?贪婪地匹配线上所有剩余的字符
  • .非贪婪匹配任意数量的字符
  • *匹配任何单个字符

如果用户输入.

,则需要执行相同的操作

免责声明:根据正则表达式函数{{1}}中使用的选项,可能与新行匹配也可能不匹配。根据您的用户群,最好只是告诉用户搜索词需要遵循正则表达式语法。这将允许知识渊博的用户建立自己的深奥表达。