chengong17 发表于 2022-7-29 12:43

求教一个正则式的代码写法。

本人是一个工程男,没有什么编程基础,近来在quicker上搜到一个功能,希望能把它功能延伸一下自己用,但是一些文件名的识别又不很会写,研究了半天的正则式无果,就在这里提出请教了。
quicker上的软件原来的用法是根据文件名自动分类归入文件夹,但是功能有一定的局限。
我们设计院出图有严格的文件名标准,按楼栋、专业、图号、图名、图幅这样的顺序用下划线连起来,如“2号楼_建施_05_四层平面图屋面层平面图_A1”。
请问我需要把仅把楼栋号提取出来这个正则式要如何写?要把志业提取出来要如何写?要把图幅提出来要怎么写?
还请各位不吝赐教,非常感谢。

颜师古都 发表于 2022-7-29 15:00

他用下划线分的很清楚了   用split分割下划线才是最好的

Incoparab 发表于 2022-7-29 15:12

同意楼上,分割下划线还简单一点

Liona 发表于 2022-7-29 15:13

https://s3.bmp.ovh/imgs/2022/07/29/9bb0c51baa391c93.png

这个小括号内的叫做原子组,可以使用\1获取到

希望能帮到你

lhlking 发表于 2022-7-29 15:49

要是会一点编程会很方便获取文件名之后,用split把_进行数组分割,然后再取固定数组的值就行了。正则表达式应该也可以实现

hanzj06 发表于 2022-7-29 16:23

本帖最后由 hanzj06 于 2022-7-29 16:31 编辑

import re
str1 = "2号楼_建施_05_四层平面图屋面层平面图_A1"
res = re.findall('(\d+)号楼_(.+)_(.+)_(.+)_(.+)', str1)
for item in res:
    print(item)
2
建施
05
四层平面图屋面层平面图
A1

Process finished with exit code 0
(\d+)号楼_(.+)_(.+)_(.+)_(.+)
括号里是你要匹配并获取的值,其他的可以用不变字符替换

狐白本白 发表于 2022-7-29 16:31

确实 下划线分的很清楚了split才是最方便的

jllovecy 发表于 2022-7-29 16:53

百度一个批量获取文件名的bat,然后获取的数据放在Excel中,用 下划线 分列,很简单的

~零度 发表于 2022-7-29 17:25

使用“正向肯定预查”和“反向肯定预查”两种语法规则即可实现(https://www.runoob.com/regexp/regexp-metachar.html)
源文本:2号楼_建施_07_8轴-1轴立面图D轴-A轴立面图_A1
模式:.+(?=_.+_.+_.+_.+)匹配结果:2号楼
模式:(?<=.+_).+(?=_.+_.+_.+) 匹配结果:建施
模式:(?<=.+_.+_).+(?=_.+_.+) 匹配结果:07
模式:(?<=.+_.+_.+_).+(?=_.+) 匹配结果:8轴-1轴立面图D轴-A轴立面图
模式:(?<=.+_.+_.+_.+_).+ 匹配结果:A1

chengong17 发表于 2022-7-30 07:30

本帖最后由 chengong17 于 2022-7-30 07:33 编辑

~零度 发表于 2022-7-29 17:25
使用“正向肯定预查”和“反向肯定预查”两种语法规则即可实现(https://www.runoob.com/regexp/regexp-met ...
多谢,这个表达式是一个很好的思路。我再深入学习一下。那我再问一下,如果我的命名里头有很多_.+,那我要如何进行定位以下两种情况
一种是第二个下划至第三个下划之间的内容
一种是倒数第二个下载至倒数第三个下划之间的内容
页: [1] 2
查看完整版本: 求教一个正则式的代码写法。