如何修改SSIS脚本组件中的Regex以提取含斜杠的门牌号
SSIS脚本组件门牌号提取Regex适配修改
原正则的适配缺口
原有正则^[0-9]+([A-Za-z]\\b)?仅能匹配字符串开头的数字段、以及数字后紧跟的单个字母后缀,遇到带斜杠分隔的复合门牌号(如49b/15 Main street这类格式)时,会在字母后的斜杠位置中断匹配,无法完整提取斜杠后的数字段,导致提取结果不符合预期。
正则修改方案
替换原有正则表达式为:
string sPattern = "^[0-9]+[A-Za-z]?(?:/[0-9]+)*\\b";
正则规则逐段说明
^强制从字符串起始位置开始匹配,避免误匹配街道文本中间的数字内容[0-9]+匹配门牌号起始位置的连续数字核心段[A-Za-z]?可选匹配数字后紧跟的单字母后缀(如49b中的b)(?:/[0-9]+)*非捕获组规则,可重复匹配0次或多次斜杠+连续数字的结构,专门覆盖49b/15这类带斜杠分隔的复合门牌号场景,不会抓取街道名称中的无关斜杠内容\\b单词边界标记,确保匹配到第一个非门牌号字符(通常是空格)时即停止,不会把后续街道名称内容纳入提取结果
适配后完整可运行代码
public override void Input0_ProcessInputRow(Input0Buffer Row) { //匹配规则:开头数字 + 可选单字母后缀 + 0或多段“/数字”复合门牌结构,碰到单词边界停止 string sPattern = "^[0-9]+[A-Za-z]?(?:/[0-9]+)*\\b"; string sString = Row.ADDRESS ?? ""; //空值地址统一转空字符串处理 Match match = Regex.Match(sString, sPattern, RegexOptions.IgnoreCase); if (match.Success) Row.CivicNumber = match.Groups[0].Value; else Row.CivicNumber = ""; } }
适配覆盖场景验证
- 纯数字门牌:
123 Oak Avenue提取结果为123 - 带字母后缀门牌:
49b Main street提取结果为49b - 带斜杠复合门牌:
49b/15 Main street提取结果为49b/15 - 纯数字斜杠结构门牌:
12/3 Elm Road提取结果为12/3
内容的提问来源于stack exchange,提问作者Simon GIS
相关产品推荐
相关产品推荐

