regex 查询特定文件名的正则表达式格式

ia2d9nvy  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(146)

我必须重命名一些文件-想到使用正则表达式自动化这个过程。
当前文件名格式为:

CompanyName-Invoice-04-Date-2021-01-06-**Client-Abra**-**Paid**
CompanyName-Invoice-20-Date-2022-10-10-**Client-Abra-Cadabra**-**Paid**
CompanyName-Invoice-99-Date-2023-12-31-**Client-Boombastic-Fantastic**-**Paid**

我想将文件名格式更改为:

CompanyName-Invoice-04-**Client-Abra**-Date-2021-01-06-**Paid**
CompanyName-Invoice-20-**Client-Abra-Cadabra**-Date-2022-10-10-**Paid**
CompanyName-Invoice-99-**Client-Boombastic-Fantastic**-Date-2023-12-31-**Paid**

我已经设法组在一起,直到日期的一部分使用:

^([A-Za-z0-9-]{17})([-]{1})([A-Za-z0-9-]{15})([-]{1})

我故意把“-”分开,这样如果我想的话,我以后可以操纵它。
当涉及到对格式的“客户名称”和“付费”部分进行分组时,我做得不好。
如果能帮我把最后两部分组合起来我会很感激的。
非常感谢!

myss37ts

myss37ts1#

您可以尝试使用lookarounds进行匹配:

(?<=-\d{2}-)(Date-\d{4}-\d{2}-\d{2})-(.*)(?=-Paid)

然后将匹配替换为位置为\2-\1的组(Python风格)。

正则表达式说明

  • (?<=-\d{2}-):正向后看(匹配之前的内容)
  • -\d{2}-:破折号后跟两位数字和另一个破折号
  • (Date-\d{4}-\d{2}-\d{2})第1组,包含您的日期
  • -:破折号
  • (.*)Group 2,包含您的字符串
  • (?=-Paid):正向前看(匹配后的内容)
  • -Paid:破折号后跟“已付”

检查regex demo here

brgchamk

brgchamk2#

试试这个:

^([a-zA-Z\d-]+)(-)(Date-\d{4}\d{2}-\d{2})(-)(Client-[a-zA-Z\d-]+)(-)([a-zA-Z\d])+$

这个很吻合

  • 任何一串字母、数字或连字符
  • 后跟连字符
  • 后跟Date-和日期
  • 后跟连字符
  • 后跟Client和任意字母、数字或连字符串
  • 后跟连字符
  • 后面跟着一个单词
xytpbqjk

xytpbqjk3#

如果可以,请具体说明:

/(CompanyName\-Invoice-[0-9]{2})-(Client-[-A-Za-z]{2,})-Date-([0-9]{4}-[0-9]{2}-[0-9]{2})-Paid/

Group 1 = company_name_invoice_# e.g. "CompanyName-Invoice-99"
Group 2 = date e.g. "2023-12-31"
Group 3 = client_blah "Client-Boombastic-Fantastic"

new = (\1)-(\3)-Date-(\2)-Paid

相关问题