gpt4 book ai didi

带有一个日期和可选的第二个日期的文件名的 Java 正则表达式

转载 作者:行者123 更新时间:2023-12-02 02:23:23 25 4
gpt4 key购买 nike

我有如下文件:

Foo_Apr17_bar_May18.csv
Foo_Mar16.csv

第一个月始终为 3 个字母,第一年始终直接跟随 2 位数字。第二个月(如果存在)也始终是 3 个字母,后跟第二年的 2 位数字。但是,第二个月和第二年可能不存在。

我如何才能始终捕获第一个月和第一年,并捕获第二个月和第二年(如果存在)?

这还不够切:

^.*_([\w]{3})([\d]{2}).*(([\w]{3})([\d]{2}))?.*.csv

谢谢!

注意

我只允许传递单个正则表达式,而不能进行多次匹配。该代码无法更改。正则表达式通过配置文件传入,字段名称也是如此。字段名称用作映射键。

最佳答案

由于您无法更改代码,因此您可以使用

^.*?_(\w{3})(\d{2})(?:.*(\w{3})(\d{2}))?\.csv$

请参阅regex demo .

要点是 .* 应该放入可选(用贪婪的 ? 量词组成)组和与月份和日期匹配的捕获组中在该组内必须是强制的。

图案详细信息

  • ^ - 字符串开头
  • .*? - 任何 0+ 个字符,但尽可能少
  • _ - 一个 _ 字符
  • (\w{3}) - 第 1 组:三个单词字符
  • (\d{2}) - 第 2 组:两位数字
  • (?:.*(\w{3})(\d{2}))? - 可选的非捕获组,匹配 1 或 0 次出现 (因此,至少将进行 1 次尝试):
    • .* - 任何 0+ 个字符,尽可能多
    • (\w{3}) - 第 3 组:三个单词字符
    • (\d{2}) - 第 4 组:两位数字
  • \.csv - .csv 字符串
  • $ - 字符串结尾。

关于带有一个日期和可选的第二个日期的文件名的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48156908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com