小编Nat*_*ard的帖子

Perl正则表达式中的加权析取?

我对正则表达式很有经验,但我对当前涉及析取的应用程序有一些困难.

我的情况是这样的:我需要根据地址的"标识符元素"上的正则表达式匹配将地址分成其组成部分 - 类似的英语示例可能是"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} = …

regex perl greedy cjk street-address

4
推荐指数
1
解决办法
434
查看次数

标签 统计

cjk ×1

greedy ×1

perl ×1

regex ×1

street-address ×1