找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24328|回复: 3

[其他] 请教一个正则匹配的问题

[复制链接]
发表于 2019-11-26 09:31:11 | 显示全部楼层 |阅读模式
本帖最后由 ivor 于 2019-11-26 13:18 编辑

正则匹配真伤啊。
  1. 样本:江西省上饶市信州区分宜县

  2. 优先匹配顺序  1.xx市  or  2. xx区  or 3.xx县  我的目标是只取一条匹配结果。
  3. 前面开头可能没有xx省,开头也可能没有xx市
复制代码
发表于 2019-11-26 12:10: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

复制代码

评分

参与人数 1技术 +1 收起 理由
ivor + 1 只需要正则表达式就行了就行了,同样感谢

查看全部评分

 楼主| 发表于 2019-11-26 12:48:58 | 显示全部楼层
本帖最后由 ivor 于 2019-11-26 12:56 编辑

附上自己的正则:(?<=[省市区]).*?[市区县],还是差一条前面如果没有省份,就不行了

其实加一条if语句控制 开头是否有省份也可以解决问题,只是感觉那样做比较笨。
发表于 2019-11-26 21:57:31 | 显示全部楼层
本帖最后由 WHY 于 2019-11-26 22:01 编辑

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

评分

参与人数 1技术 +1 收起 理由
ivor + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 12:53 , Processed in 0.019641 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表