Python字符串中短横线(-)与长横线(—)的分割及替换问题
解决Python中两种横线的分割与替换问题
问题1:能否同时按短横线(-)和长横线(—)分割字符串?
完全可以,用Python的re模块(正则表达式)就能实现。正则支持指定多个分隔符,把两种横线放在字符集里即可:
import re from pathlib import Path desktop = Path("你的桌面路径") result = list(desktop.glob("*.pdf")) for file_path in result: filename = file_path.name # 同时按短横线和长横线分割 parts = re.split(r'[-—]', filename) # 后续处理分割后的parts
这里的r'[-—]'是正则字符集,表示匹配短横线-或者长横线—中的任意一个,以此作为分割依据。
问题2:能否将长横线(—)替换为短横线(-)?
当然可以,之前用ASCII码失败是因为长横线—不属于ASCII字符(它是Unicode的U+2014字符),直接用字符本身或者Unicode转义符替换即可:
for file_path in result: filename = file_path.name # 把长横线替换成短横线 normalized_filename = filename.replace('—', '-') # 再按短横线分割 parts = normalized_filename.split('-')
如果直接输入长横线有问题,也可以用Unicode转义写法:filename.replace('\u2014', '-'),效果完全一致。
问题3:为什么之前用ASCII码调用split和replace失败?怎么实现同时分割?
你之前失败的核心原因是长横线不是ASCII字符:alt+0151对应的是Windows扩展ASCII的字符,但Python中字符串默认是Unicode编码,直接用ASCII码(比如chr(151))去匹配,得到的字符和实际文件名里的长横线(Unicode U+2014)不是同一个,所以匹配失败。
要实现同时分割,最直接的方法就是用前面提到的re.split()方案,无需先替换,一步到位完成分割。
内容的提问来源于stack exchange,提问作者josh
相关产品推荐
相关产品推荐

