【发布时间】:2020-11-01 00:55:58
【问题描述】:
我需要将带有文件名的字符串分成5个部分,如下例所示:
#!/usr/bin/env bash
str="python-zope-proxy-4.3.5-1-x86_64.chi.zst"
pkg_re='(.+)-[^-]+-[0-9]+-([^.]+)\.chi.zst*'
[[ $str =~ $pkg_re ]] &&
pkg_base = ${BASH_REMATCH[1]}
pkg_arch = ${BASH_REMATCH[2]}
echo $pkg_base
echo $pkg_arch
块必须如下:
block 1 - python-zope-proxy # pkg_base
block 2 - 4.3.5-1 # pkg_version_build
block 3 - 4.3.5 # pkg_version
block 4 - 1 # pkg_build
block 5 - x86_64 # pkg_arch
使用下面的正则表达式,我得到块 1 和块 5,如上所示。
str="python-zope-proxy-4.3.5-1-x86_64.chi.zst"
pkg_re='(.+)-[^-]+-[0-9]+-([^.]+)\.chi.zst*'
[[ $str =~ $pkg_re ]] &&
pkg_base = ${BASH_REMATCH[1]}
pkg_arch = ${BASH_REMATCH[2]}
在以下情况下,表达式还必须被视为文件名字符串:
str="python-4.3.5-1-x86_64.chi.zst"
str="python-zope-4.3.5-1-x86_64.chi.zst"
str="python-zope-proxy-4.3.5-1-x86_64.chi.zst"
【问题讨论】:
-
如果您只想匹配单个 t
(.+)-(([^-]+)-([0-9]+))-([^.]+)\.chi\.zstregex101.com/r/CSeGSk/1,我认为您可以添加一些额外的捕获组,转义最后一个点并删除最后一个 t 之后的星号 -
@Thefourthbird 完美!
-
@Thefourthbird 在某些情况下正则表达式不起作用,我应该在哪里发布并解释什么不起作用?
-
您可以在答案下添加评论,对于哪种情况它不起作用。