扩展regex并支持日期时间格式代码的库。

datetime-matcher的Python项目详细描述


日期时间匹配器

PyPIPyPI - StatusPyPI - Python VersionPyPI - License

datetime matcher是python模块,它支持regex的扩展,它允许 匹配、提取和重新格式化字符串化的日期时间。在

最值得注意的是,它提供了一个基本上结合re.sub的函数, datetime.strptime,和datetime.strftime标准库函数并执行所有操作 复杂的解析和连线。在

对于像批量重命名带有日期时间的文件这样的事情,它非常有用 文件名。但不要让我们告诉你什么是好的,你自己试试看!在

安装

现在从pypi那里通过运行

pip install datetime-matcher

使用日期时间重新格式化的字符串替换示例

假设我们有几个要重命名的文件名,格式如下:

^{pr2}$

我们想把它们改成这样:

'20200310-MyLovelyPicture.jpg'

不干净的方法,没有日期时间匹配器

使用标准库re.sub,我们遇到了一个问题:

text='MyLovelyPicture_2020-Mar-10.jpeg'search=r'(\w+)_([0-9]{4}-\w{3}-[0-9]{2})\.jpe?g'# ❌ messyreplace=r'(??????)-\1.jpg'# ❌ what do we put for ??????result=re.sub(search,replace,text)# ❌ This does't work

我们必须使用自定义解析器字符串手动运行datetime.strptime,以提取 日期,然后在运行之前手动将其插入到替换字符串中 使用自定义替换字符串进行非泛型搜索和替换。在

恶心。在

使用datetime matcher

我们可以做下面的一个快速和容易的替代与重新格式化。在

fromdatetime_matcherimportDatetimeMatcherdtmatcher=DatetimeMatcher()text='MyLovelyPicture_2020-Mar-10.jpeg'search=r'(\w+)_%Y-%b-%d\.jpe?g'# ✅replace=r'%Y%m%d-\1.jpg'# ✅result=dtmatcher.sub(search,replace,text)# ✅# result == '20200310-MyLovelyPicture.jpg'    # ✅

特点

该库具有一个类DatetimeMatcher,它提供了以下功能 面向公众的方法:

sub

defsub(self,search_dfregex:str,replacement:str,text:str,count:int=0)->str
  • 替换中搜索dfregex的匹配实例 给定文本与替换正则表达式,智能传输 从原始文本到替换文本的匹配日期 对于每个正则表达式匹配。在
  • 如果没有找到匹配项,则返回原始文本。在
  • 使用非零计数限制提取的数量。在
  • 在dfregex字符串中使用strftime代码来提取/放置日期时间。在

match

defmatch(self,search_dfregex:str,text:str)->Optional[Match[AnyStr]]
  • 确定文本是否与给定的dfregex匹配。在
  • 如果找到,则返回相应的匹配对象,否则返回None。在
  • 在dfregex字符串中使用strftime代码来提取/放置日期时间。在

get_regex_from_dfregex

defget_regex_from_dfregex(self,dfregex:str,is_capture_dfs:bool=False)->str
  • 将dfregex转换为其对应的常规regex。在
  • 默认情况下,不捕获日期时间格式组。在
  • 在dfregex字符串中使用strftime代码来匹配日期时间。在

extract_datetimes

defextract_datetimes(self,dfregex:str,text:str,count:int=0)->Iterable[datetime]
  • 从给定dfregex字符串的文本中提取最左边的日期时间。在
  • 返回日期时间对象的Iterable。在
  • 使用非零计数限制提取的数量。在
  • 在dfregex字符串中使用strftime代码来匹配日期时间。在

extract_datetime

defextract_datetime(self,dfregex:str,text:str)->Optional[datetime]
  • 从给定dfregex字符串的文本中提取最左边的日期时间。在
  • 如果找到匹配的datetime对象,则返回,否则返回None。在
  • 在dfregex字符串中使用strftime代码来匹配日期时间。在

dfregex语法

dfregex的语法与传统python regex的语法几乎相同。 只有一个添加和一个修改来支持日期时间格式代码。在

日期时间格式代码

百分比字符表示日期时间格式代码的开头。这些代码 是datetime的内置datetime模块中使用的标准C样式的。在

有关代码的完整列表,请参见the Python docs。在

NOTE: The following codes are currently not supported: %Z, %c, %x, %X

文字百分比(%)

常规正则表达式(%)中的百分比文本必须在dfregex(\%)中转义 因为未转义的标记日期时间格式代码的开始,否则 模棱两可的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java类之间并发性不一致的HashMap   插件如何在JavaSwing中使用UIManager和Classloader从外部jar安装外观?   java JasperReports:找不到子报表   在项目中找不到java生成的Javadoc文件   java BigDecimal。multiply()和divide()方法返回十六进制数。为什么?   java统计出现次数并从字符串中删除重复项   调用运算符时发生java NullPointerException   Spring和Hibernate之间的java配置错误   JavaZK将用户重定向回上一页   Javasocket为传出连接指定特定的网络接口   如果拖动到某个区域外,java Make按钮操作将被取消   如何在Eclipse for selenium 3.141.59中添加Java文档链接   java从匹配条件的数组中获取所有索引   docker未连接到RemoteWebDriver的java Gitlab ci selenium测试   java重写run方法   utf 8如何使用java解码UTF8编码的字符串?   java如何从eclipse调试部署在tomcat上的web应用程序?   将字母字符与前面没有百分号的Java正则表达式匹配