问题描述
我正在尝试捕获并替换一个文件名,例如 000035 ZSMS_1.mp3 还有一个像 000035 1OMNA (我基本上是想对它们重新排序,以便它们看起来像是ZSMS_1(000035).mp3)。 我尝试过
^(\d+) (.*)(\..*$)?
^(\d+) (.*?)(\..*$)?
我希望发生的事情: 000035 ZSMS_1.mp3:
[
{
"groups": [
"000035","ZSMS_1",".mp3"
],"match": "000035 ZSMS_1.mp3"
}
]
000035 1OMNA:
[
{
"groups": [
"000035","1OMNA",""
],"match": "000035 1OMNA"
}
]
会发生什么: 1。
^(\d+) (.*)(\..*$)?
000035 ZSMS_1.mp3:
[
{
"groups": [
"000035","ZSMS_1.mp3","match": "000035 1OMNA"
}
]
^(\d+) (.*?)(\..*$)?
000035 ZSMS_1.mp3:
[
{
"groups": [
"000035","","match": "000035 "
}
]
000035 1OMNA:
[
{
"groups": [
"000035","match": "000035 "
}
]
解决方法
您可以使用
^(\d+)\h+(.*?)(\.[^.]*)?$
请参见regex demo
详细信息
-
^
-字符串的开头 -
(\d+)
-第1组:一个或多个数字 -
\h+
-1个以上的水平空格(为了获得更好的正则表达式引擎交叉兼容性,您可以使用[^\S\r\n]+
或仅使用[ \t]+
来匹配制表符或空格) -
(.*?)
-第2组:零个或多个除换行符以外的字符,并且尽可能少 -
(\.[^.]*)?
-一个可选的捕获组#3:一个点,然后尽可能多地添加.
以外的0个或更多字符 -
$
-字符串的结尾。
您可以尝试使用正则表达式:
^(\d+)\s*(?:(\w+)?)(?:(\.\w+)?)$
详细信息:
-
^
-行首 -
(\d+)
-第1组:匹配一个数字 -
\s*
-分隔组1和2 -
(?:(\w+)?)
-第2组(可选):匹配任何文字字符 -
(?:(\.\w+)?)
-第3组(可选):与字符匹配。还有任何文字字符 -
$
-行尾