我对正则表达式很有经验,但我对当前涉及析取的应用程序有一些困难.
我的情况是这样的:我需要根据地址的"标识符元素"上的正则表达式匹配将地址分成其组成部分 - 类似的英语示例可能是"state","road"或" boulevard" - 例如,我们在地址中写了这些内容.想象一下,我们有一个类似下面的地址,其中(这在英语中永远不会发生),我们在每个名称后面指定了标识符类型
United States COUNTRY California STATE San Francisco CITY Mission STREET 345 NUMBER
(CAPS中的单词是我所谓的"标识符").
我们想将其解析为:
United States COUNTRY
California STATE
San Francisco CITY
Mission STREET
245 NUMBER
好吧,这对于英语来说当然是设计的,但这里有一个问题:我正在处理中文数据,实际上这种标识符规范的风格一直在发生.以下示例:
??-? ; ??-? ; ??-? ; ??-? ; ??-? ;
Yunnan-Province ; LiJiang-City ; GuCheng-District ; Xi'An-Street ; Yangchun-Alley
这很容易 - 对潜在的候选标识符名称进行惰性匹配,分为分离列表.
对于中国,以下是"省级"实体:
? (Province) ,
??? (Autonomous Region) ,
? (Municipality)
所以我的正则表达式到目前为止看起来像这样:
(.+?(?:(?:?)|(?:???)|(?:?)))
我有一系列这些,以便考虑地址的不同部分.例如,对应于城市的下一级是:
(.+?(?:(?:??)|(?:???)|(?:?)|(?:?)))
因此,要匹配省实体,然后是城市实体:
(.+?(?:(?:?)|(?:???)|(?:?)))(.+?(?:(?:??)|(?:???)|(?:?)|(?:?)))
使用命名捕获组:
(?<Province>.+?(?:(?:?)|(?:???)|(?:?)))(?<City>.+?(?:(?:??)|(?:???)|(?:?)|(?:?)))
对于上述情况,这会产生:
$+{Province} = ???
$+{City} = …