已经搜遍了所有但似乎无法弄清楚这一点。有一些地址,我试图打破街道名称。
我需要能够获得Sea Spray或Walden Elms或High star以及单词街道和街道,类似于第54或第12街。
996 SEA SPRAY DR
174 S WALDEN ELMS CIR
1210 CHAPEL CONE LN#1210
602 SAWYER ST#710
911国家
16715 CLAY RD
12302 HIGH STAR DR
575 PETE SCHAFF BLVD
2700 TOWN CENTER BLVD N
601 54TH ST#1105
815 12TH ST
以下是我需要的街道,但是除了54和12之外的所有街道都包括街道后缀。为什么不是最后一个非捕获组工作?
(\d+(?:ST|RD|TH|ND|BLVD|LN|DR|CIR))\s|(\s[A-Z]\w*)|(\d+(?:ST|RD|BLVD|CIR|LN))
答案 0 :(得分:1)
问题是中间组中的or
表达式包含您要排除的项目。
您的正则表达式实际上是包含|
条件的三个表达式((\d+(?:ST|RD|TH|ND|BLVD|LN|DR|CIR))\s
)
(\s[A-Z]\w*)
(\d+(?:ST|RD|BLVD|CIR|LN))
\s
第一组似乎试图匹配基于数字的街道名称(例如:" 14th"," 3rd")并成功捕获第54街的示例地址第12街。
第三组似乎只是第一组的一个子集,但没有尾随空格(\s
)表达式。它与您的示例中的任何内容都不匹配。
第二组捕获任何空格([A-Z]
),后跟大写A-Z(\w*
)中的任何单个字符,然后捕获任意数量的单词字符((?!(RD|DR|BLVD|CIR|LN))
)。这几乎与其他所有东西相匹配。如果你想从匹配的内容中排除" ST,RD,BLVD"等,那么你需要为这些词((\s(?!(RD|DR|BLVD|CIR|LN))[A-Z]\w*)
)做negative lookahead assertion你的表达式,这将使中间表达式如下所示:
(\d+(?:ST|RD|TH|ND|BLVD|LN|DR|CIR))\s|(\s(?!(RD|DR|BLVD|CIR|LN))[A-Z]\w*)|(\d+(?:ST|RD|BLVD|CIR|LN))
,完整的表达式如下:
15W22S 87th St
所有这一切,我想:
var vertices = d3.range(100).map(function(d) {
return [Math.random() * width, Math.random() * height];
});
。这将使你的正则表达式失败,因为房子"数字"包括信件。答案 1 :(得分:0)
如果您的地址列表有限,并且您能够如上所述预测格式,那么您不能在C#中使用简单的字符串拆分吗?
string[] arrSplitAdd = address.Split(new string[] {"ST","RD","TH","ND","BLVD","LN","DR","CIR"},StringSplitOptions.RemoveEmptyEntries);
string numberAndStreet=arrSplitAdd[0];
string streetName = RegEx.Replace(streetName,"[0-9]*","");
为每个地址线迭代此逻辑。