[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

正则匹配真伤啊。
  1. 样本:江西省上饶市信州区分宜县
  2. 优先匹配顺序  1.xx市  or  2. xx区  or 3.xx县  我的目标是只取一条匹配结果。
  3. 前面开头可能没有xx省,开头也可能没有xx市
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

回复 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

评分人数

    • ivor: 只需要正则表达式就行了就行了,同样感谢技术 + 1

TOP

本帖最后由 ivor 于 2019-11-26 12:56 编辑

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

其实加一条if语句控制 开头是否有省份也可以解决问题,只是感觉那样做比较笨。
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

本帖最后由 WHY 于 2019-11-26 22:01 编辑

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

评分人数

    • ivor: 乐于助人技术 + 1

TOP

返回列表