查看: 461|回复: 4
打印 上一主题 下一主题

[求助] 关于文件完整路径的正则提取

[复制链接]

该用户从未签到

3

主题

235

回帖

5070

积分

会元

Rank: 7Rank: 7Rank: 7

积分
5070
跳转到指定楼层
1
发表于 2020-3-16 11:17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dongzhi1980 于 2020-3-16 11:21 编辑

文件内容共4行,存储内容为文件的地址(pdf和.7z格式)和网页链接。
目标是:提取每个PDF文件的全名(形如abc.pdf等)及其前一项的ID(文件名前面一项,形如BUUXZJBF,BZ7QHC8S等8位数的ID标签)。
由于,1.文件名中有特殊符号"\;", 2.里面混杂了.7z文件。我在python re 下没有成功提取,请大家出手相助。注:只需提供正则表达式即可。谢谢

file = {E\:\\storage\\BUUXZJBF\\Kottwitz - 2011 - Xyz beginner's guide \; one book name .pdf},
file = {E\:\\storage\\BZ7QHC8S\\Xyz programming - an introduction..pdf;E\:\\storage\\I5CN6Q4Y\\ABC Programming Advanced Introduction.7z;E\:\\storage\\LIEKLY4B\\NO programming - an advanced introduction chs..pdf;E\:\\storage\\4UVU3D66\\www.ccc-intro.org.html},
howpublished = {http://www.123.org/}
file = {E\:\\storage\\CUUXZJBG\\Tomz - 2015 - OK beginner's guide another book name.pdf}

该用户从未签到

2121

主题

2961

回帖

6万

积分

翰林院修撰

不忘初心。送分大人,灌水砖家。擅长抛砖引玉,挖坑不填。

Rank: 12Rank: 12Rank: 12

积分
61056

翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

推荐
发表于 2020-3-16 11:46:42 | 只看该作者


  1. import re

  2. string = """file = {E\:\\storage\\BUUXZJBF\\Kottwitz - 2011 - Xyz beginner's guide \; one book name .pdf},
  3. file = {E\:\\storage\\BZ7QHC8S\\Xyz programming - an introduction..pdf;E\:\\storage\\I5CN6Q4Y\\ABC Programming Advanced Introduction.7z;E\:\\storage\\LIEKLY4B\\NO programming - an advanced introduction chs..pdf;E\:\\storage\\4UVU3D66\\www.ccc-intro.org.html},
  4. howpublished = {http://www.123.org/}
  5. file = {E\:\\storage\\CUUXZJBG\\Tomz - 2015 - OK beginner's guide another book name.pdf}"""


  6. pattern = re.compile(r"\\([0-8A-Z]{8})\\([^:}]+?\.pdf)")

  7. m = pattern.findall(string)

  8. for item in m:
  9.     print(item)
复制代码


输出

  1. ('BUUXZJBF', "Kottwitz - 2011 - Xyz beginner's guide \\; one book name .pdf")
  2. ('BZ7QHC8S', 'Xyz programming - an introduction..pdf')
  3. ('LIEKLY4B', 'NO programming - an advanced introduction chs..pdf')
  4. ('CUUXZJBG', "Tomz - 2015 - OK beginner's guide another book name.pdf")
复制代码


评分

1

查看全部评分

该用户从未签到

3

主题

235

回帖

5070

积分

会元

Rank: 7Rank: 7Rank: 7

积分
5070
3
 楼主| 发表于 2020-3-16 17:51:07 | 只看该作者
本帖最后由 dongzhi1980 于 2020-3-16 18:17 编辑

谢谢O大的详细解答,请问,
文件名中多余的“\”怎么去除,真实文件名是"Kottwitz - 2011 - Xyz beginner's guide ; one book name .pdf"。
生成的字符串 '\\Kottwitz - 2011 - LaTeX beginner\'s guide \\; create high-quality and .pdf' 中

多余的"\"导致程序后续操作产生问题。



该用户从未签到

2121

主题

2961

回帖

6万

积分

翰林院修撰

不忘初心。送分大人,灌水砖家。擅长抛砖引玉,挖坑不填。

Rank: 12Rank: 12Rank: 12

积分
61056

翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

4
发表于 2020-3-16 18:36:51 | 只看该作者
dongzhi1980 发表于 2020-3-16 17:51
谢谢O大的详细解答,请问,
文件名中多余的“\”怎么去除,真实文件名是"Kottwitz - 2011 - Xyz beginner' ...



抱歉手抖吧 0-9 敲成 0-8 了。

  1. import re

  2. string = """file = {E\:\\storage\\BUUXZJBF\\Kottwitz - 2011 - Xyz beginner's guide \; one book name .pdf},
  3. file = {E\:\\storage\\BZ7QHC8S\\Xyz programming - an introduction..pdf;E\:\\storage\\I5CN6Q4Y\\ABC Programming Advanced Introduction.7z;E\:\\storage\\LIEKLY4B\\NO programming - an advanced introduction chs..pdf;E\:\\storage\\4UVU3D66\\www.ccc-intro.org.html},
  4. howpublished = {http://www.123.org/}
  5. file = {E\:\\storage\\CUUXZJBG\\Tomz - 2015 - OK beginner's guide another book name.pdf}
  6. file = {E\:\\Data\\storage\\2MTGE89K\\Matlab users guide_Symbolic Math Toolbox.pdf;E\:\\Data\\storage\\CS58DYJW\\Matlab users guide_Parallel Computing Toolbox.pdf;E\:\\Data\\storage\\IAR9VKWB\\Matlab Programming Fundamentals.pdf;E\:\\Data\\storage\\RV3RTI3V\\Matlab Mathematics.pdf}"""


  7. pattern = re.compile(r"\\([0-9A-Z]{8})\\([^:}]+?\.pdf)")

  8. m = pattern.findall(string)

  9. for item in m:
  10.     print(item[0], item[1].replace("\",""))
复制代码

输出

  1. BUUXZJBF Kottwitz - 2011 - Xyz beginner's guide ; one book name .pdf
  2. BZ7QHC8S Xyz programming - an introduction..pdf
  3. LIEKLY4B NO programming - an advanced introduction chs..pdf
  4. CUUXZJBG Tomz - 2015 - OK beginner's guide another book name.pdf
  5. 2MTGE89K Matlab users guide_Symbolic Math Toolbox.pdf
  6. CS58DYJW Matlab users guide_Parallel Computing Toolbox.pdf
  7. IAR9VKWB Matlab Programming Fundamentals.pdf
  8. RV3RTI3V Matlab Mathematics.pdf
复制代码


该用户从未签到

3

主题

235

回帖

5070

积分

会元

Rank: 7Rank: 7Rank: 7

积分
5070
5
 楼主| 发表于 2020-3-16 19:36:27 | 只看该作者
本帖最后由 dongzhi1980 于 2020-3-16 20:21 编辑
Oeasy 发表于 2020-3-16 18:36
抱歉手抖吧 0-9 敲成 0-8 了。

再次感谢,0-8 的问题我自己仔细查看后给解决了,正想着“挖坑不填”的含意呢,正好收到回复了。意外的惊喜。
最后再麻烦你一次,如果不用 “:}” 排除,改为用 “E\:” 和 “}” 排除,用什么方法呢,在网上查了很多关于断言的操作,但还是不会用。
谢谢!