Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Python:将格式字符串转换为正则表达式

Python:将格式字符串转换为正则表达式
EN

Stack Overflow用户
提问于 2010-04-16 09:07:14
回答 2查看 5.9K关注 0票数 7

我的应用程序的用户可以通过一个格式字符串配置特定文件的布局。

例如,用户指定的配置值可能是:

代码语言:javascript
代码运行次数:0
复制
layout = '%(group)s/foo-%(locale)s/file.txt'

我现在需要找到已经存在的所有这样的文件。使用glob模块似乎很容易:

代码语言:javascript
代码运行次数:0
复制
glob_pattern = layout % {'group': '*', 'locale': '*'}
glob.glob(glob_pattern)

然而,现在出现了困难的部分:给定glob结果列表,我需要获得所有这些文件名--与给定占位符匹配的部分,例如,所有不同的"locale“值。

我想我应该为格式字符串生成一个正则表达式,然后我可以将其与glob结果列表相匹配(或者可能跳过glob并自己进行所有匹配)。

但是,我找不到一种很好的方法来创建正则表达式,既包含适当的组捕获,又能转义其余的输入。

例如,这可能给我一个与区域设置相匹配的正则表达式:

代码语言:javascript
代码运行次数:0
复制
regex = layout % {'group': '.*', 'locale': (.*)}

但是要确定regex是有效的,我需要通过re.escape()传递它,然后它也会转义我刚才插入的regex语法。调用re.escape()首先会破坏格式字符串。

我知道有fnmatch.translate(),它甚至会给我一个正则表达式,但不是返回适当组的正则表达式。

有没有一个很好的方法来做到这一点,而不像用正则表达式安全的唯一值替换占位符之类的黑客呢?

有没有什么办法(也许是第三方图书馆?)它允许以更灵活的方式剖析格式字符串,例如在占位符位置拆分字符串?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-16 09:46:56

由于您使用的是命名占位符,所以我将使用命名组。这似乎是可行的:

代码语言:javascript
代码运行次数:0
复制
import re
UNIQ='_UNIQUE_STRING_'
class MarkPlaceholders(dict):
    def __getitem__(self, key):
        return UNIQ+('(?P<%s>.*?)'%key)+UNIQ

def format_to_re(format):
    parts = (format % MarkPlaceholders()).split(UNIQ)
    for i in range(0, len(parts), 2):
        parts[i] = re.escape(parts[i])
    return ''.join(parts)

然后测试:

代码语言:javascript
代码运行次数:0
复制
>>> layout = '%(group)s/foo-%(locale)s/file.txt'
>>> print format_to_re(layout)
(?P<group>.*?)\/foo\-(?P<locale>.*?)\/file\.txt
>>> pattern = re.compile(format_to_re(layout))
>>> print pattern.match('something/foo-en-gb/file.txt').groupdict()
{'locale': 'en-gb', 'group': 'something'}
票数 2
EN

Stack Overflow用户

发布于 2010-04-16 09:15:54

你可以试试这个,它可以解决你逃避的问题。

代码语言:javascript
代码运行次数:0
复制
unique = '_UNIQUE_STRING_'
assert unique not in layout
regexp = re.escape(layout % {'group': unique, 'locale': unique}).replace(unique, '(.*)')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2654856

复制
相关文章
python将webp格式的图片转换为png格式
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import time from multiprocessing.dummy import Pool from PIL import Image # tinypng 批量将文件夹下的webp文件转换为png格式 def convert(pic): pic_list = pic.split('.') name = pic_list[0] # print(name)
槽痞
2020/06/23
2.4K0
Python将字符串转换为列表
We can convert a string to list in Python using split() function.
全栈程序员站长
2022/09/06
6K0
将字符串转换为date类型_java字符串转date类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
14.1K0
python json转字符串_在python中将json转换为字符串
一开始我没有清楚地解释我的问题。在python中将json转换为字符串时,请尝试使用str()和json.dumps()。
全栈程序员站长
2022/11/16
10.3K0
将VOC格式的数据集转换为COCO格式
import xml.etree.ElementTree as ETimport osimport json coco = dict()coco['images'] = []coco['type'] = 'instances'coco['annotations'] = []coco['categories'] = [] category_set = dict()image_set = set() category_item_id = -1image_id = 20180000000annotation_id
狼啸风云
2021/06/09
3.2K0
python中字符串类型转换为数字类型_python字符串转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
5.4K0
Python如何将GrADs常用文件转换为NetCDF格式?
测试数据分享 链接:https://pan.baidu.com/s/1mj1-YpvQN414crNz32f8GA 提取码:wmfr
气象学家
2022/01/18
1.8K0
Python如何将GrADs常用文件转换为NetCDF格式?
使用Python的yaml模块将JSON转换为YAML格式
之前介绍过读取yaml文件输出json,今天介绍下使用Python的yaml模块将JSON转换为YAML格式。
怪盗LYL
2023/09/15
1.1K0
使用Python的yaml模块将JSON转换为YAML格式
Python如何将GrADs常用文件转换为NetCDF格式?
首先需要确保xgrads库的安装: pip install xgrads Install from github 或者 git clone https://github.com/miniufo/xgrads.git cd xgrads python setup.py install 链接https://github.com/miniufo/xgrads , 有提供示例ctl和dat文件,下面我们是使用的ctl和grd文件转换的,方法类似: #import sys #sys.path.append('/home/gavin/miniconda3/envs/atmpy/lib/python3.8/site-packages') #sys.path from xgrads import CtlDescriptor, open_CtlDataset ds = open_CtlDataset('lst.ctl') ctl = CtlDescriptor(file='lst.ctl') ds.attrs['pdef' ] = 'None' ds.to_netcdf('lst.nc') data = ds.ro1 data.where(data!=ctl.undef).plot(figsize=(9,5), cmap='jet') 以上需要注意两点: 1.如果在jupyter-lab中无法加载xgrads需要手动添加其路径,使用到的是:import sys 2. xgrads存在bug,如果不添加语句ds.attrs['pdef' ] = 'None'会一直报错,无法生成nc文件!
郭好奇同学
2021/08/26
2.8K0
Python如何将GrADs常用文件转换为NetCDF格式?
字符串转换整数python_将Python字符串转换为Int:如何在Python中将字符串转换为整数
Unlike many other programming languages out there, Python does not implicitly typecast integers (or floats) to strings when you concatenate them to strings.
用户7886150
2021/01/14
3.9K0
字符串转换整数python_将Python字符串转换为Int:如何在Python中将字符串转换为整数
Unlike many other programming languages out there, Python does not implicitly typecast integers (or floats) to strings when you concatenate them to strings.
用户7886150
2021/01/14
3.8K0
js将字符串时间转换为date对象_js转换日期格式
var s =’2018-10-09 10:23:12′; s = s.replace(/-/g,”/”); var date = new Date(s );
全栈程序员站长
2022/11/09
12.4K0
字符串转时间格式
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;
全栈程序员站长
2022/08/22
1.1K0
字符串转时间格式
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.4K0
mysql整型转字符串_java中如何将字符串转换为字符数组
select * from A order by cast(name as unsigned);
全栈程序员站长
2022/09/27
23.3K0
将png格式的图像转换为jpg
import osfrom PIL import Imagedirname_read="D:\dataset\cityscapes\cityscape_voc_clean\JPEGImages_png\\"dirname_write="D:\dataset\cityscapes\cityscape_voc_clean\JPEGImages_jpg\\"names=os.listdir(dirname_read)count=0for name in names: img=Image.open(dirna
狼啸风云
2020/07/16
2.3K0
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
21.2K0
将 Word 转换为 Markdown格式【详细版本】2022.5.6
(2) Word 格式 另存为Markdown(这是最关键的一步~) (3)转换后的.md文档这里用vscode打开查看效果
MIKE笔记
2023/03/22
4.2K0
将 Word 转换为 Markdown格式【详细版本】2022.5.6
教你如何免费将XPS转换为PDF格式
XPS文件在我们日常工作中使用比较少,大部分时候我们都会将它转换成PDF格式后进行修改或保存等操作,不懂这种文档要怎么打开?其实这些都不重要,只要你知道PDF就可以,教你几种将XPS转成PDF的方法,还有免费使用哦。
全栈程序员站长
2022/09/05
1.4K0
开源工具将Markdown格式转换为微信公众号格式
工具不仅能完美转换Markdown格式到微信公众号格式,还能把链接自动转换为参考文献索引,并且附在文字末尾
zhaoolee
2019/03/20
1.9K0
开源工具将Markdown格式转换为微信公众号格式

相似问题

Python格式将numpy.float32转换为Python

12

将python 2.7转换为python 3.8

21

将字符串1-24转换为日期时间格式

128

将正则表达式从Python格式转换为GNU Sed格式

11

使用python将字符串转换为格式

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档