Board logo

标题: [其他] 请教一个正则匹配的问题 [打印本页]

作者: ivor    时间: 2019-11-26 09:31     标题: 请教一个正则匹配的问题

本帖最后由 ivor 于 2019-11-26 13:18 编辑

正则匹配真伤啊。
  1. 样本:江西省上饶市信州区分宜县
  2. 优先匹配顺序  1.xx市  or  2. xx区  or 3.xx县  我的目标是只取一条匹配结果。
  3. 前面开头可能没有xx省,开头也可能没有xx市
复制代码

作者: a20150604    时间: 2019-11-26 12:10

回复 1# ivor
  1. ' 样本:江西省上饶市信州区分宜县
  2. ' 优先匹配顺序1.xx市 2. xx区 3.xx县
  3. ' 前面开头可能没有xx省,开头也可能没有xx市
  4. arr_data = array( "江西省上饶市信州区分宜县",  "上饶市信州区分宜县",  "信州区分宜县")
  5. Dim regEx                   ' 建立变量。
  6. Set regEx = New RegExp      ' 建立正则表达式。
  7. regEx.Pattern = "(?:\S+省|)(?:(\S+)市|)(\S+)区(\S+)县"
  8. for each data in arr_data
  9.     Set oMatches = regEx.Execute(data)
  10.     If oMatches.Count > 0 Then
  11.         Set oMatch = oMatches(0)
  12.         msgbox "源数据:" & data & " 市:" & oMatch.SubMatches(0) & " 区:" & oMatch.SubMatches(1) & " 县:" & oMatch.SubMatches(2)
  13.     Else
  14.         msgbox "解析失败"
  15.     End If
  16. 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 编辑

条件匹配的表达式
  1. $str = '江西省上饶市信州区分宜县';
  2. #$str = '上饶市信州区分宜县';
  3. #$str = '信州区分宜县';
  4. [regex]::Matches($str, '(?(.*省)(?<=省).*市|.*市)|(?(.*市)(?<=市).*区|.*区)|(?<=区).*县');
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2