标题: [其他] 请教一个正则匹配的问题 [打印本页]
作者: ivor 时间: 2019-11-26 09:31 标题: 请教一个正则匹配的问题
本帖最后由 ivor 于 2019-11-26 13:18 编辑
正则匹配真伤啊。- 样本:江西省上饶市信州区分宜县
-
- 优先匹配顺序 1.xx市 or 2. xx区 or 3.xx县 我的目标是只取一条匹配结果。
- 前面开头可能没有xx省,开头也可能没有xx市
复制代码
作者: a20150604 时间: 2019-11-26 12:10
回复 1# ivor - ' 样本:江西省上饶市信州区分宜县
-
- ' 优先匹配顺序1.xx市 2. xx区 3.xx县
- ' 前面开头可能没有xx省,开头也可能没有xx市
-
- arr_data = array( "江西省上饶市信州区分宜县", "上饶市信州区分宜县", "信州区分宜县")
- Dim regEx ' 建立变量。
- Set regEx = New RegExp ' 建立正则表达式。
- regEx.Pattern = "(?:\S+省|)(?:(\S+)市|)(\S+)区(\S+)县"
- for each data in arr_data
- Set oMatches = regEx.Execute(data)
- If oMatches.Count > 0 Then
- Set oMatch = oMatches(0)
- msgbox "源数据:" & data & " 市:" & oMatch.SubMatches(0) & " 区:" & oMatch.SubMatches(1) & " 县:" & oMatch.SubMatches(2)
- Else
- msgbox "解析失败"
- End If
- next
复制代码
作者: ivor 时间: 2019-11-26 12:48
本帖最后由 ivor 于 2019-11-26 12:56 编辑
附上自己的正则:(?<=[省市区]).*?[市区县],还是差一条前面如果没有省份,就不行了
其实加一条if语句控制 开头是否有省份也可以解决问题,只是感觉那样做比较笨。
作者: WHY 时间: 2019-11-26 21:57
本帖最后由 WHY 于 2019-11-26 22:01 编辑
条件匹配的表达式- $str = '江西省上饶市信州区分宜县';
- #$str = '上饶市信州区分宜县';
- #$str = '信州区分宜县';
- [regex]::Matches($str, '(?(.*省)(?<=省).*市|.*市)|(?(.*市)(?<=市).*区|.*区)|(?<=区).*县');
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |