如何捕获带或不带扩展名的文件名
How to capture a filename with or without an extension
我正在尝试捕获并替换文件名,例如
000035 ZSMS_1.mp3
还有一个像这样的文件
000035 1欧姆纳
(我基本上是在尝试重新排序它们,使它们看起来像 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 ZSMS_1.mp3"
}
]
000035 1OMNA:
[
{
"groups": [
"000035",
"1OMNA",
""
],
"match": "000035 1OMNA"
}
]
^(\d+) (.*?)(\..*$)?
000035 ZSMS_1.mp3:
[
{
"groups": [
"000035",
"",
""
],
"match": "000035 "
}
]
000035 1OMNA:
[
{
"groups": [
"000035",
"",
""
],
"match": "000035 "
}
]
您可以使用
^(\d+)\h+(.*?)(\.[^.]*)?$
详情
^
- 字符串开头
(\d+)
- 第 1 组:一个或多个数字
\h+
- 1+ horizontal whitespaces(为了更好的正则表达式引擎 cross-compatibility,你可以使用 [^\S\r\n]+
或者只是 [ \t]+
来匹配选项卡或 space)
(.*?)
- 第 2 组:除换行字符外的零个或多个字符,尽可能少
(\.[^.]*)?
- 一个可选的捕获组 #3:一个点,然后是 .
以外的 0 个或更多字符,尽可能多
$
- 字符串结尾。
您可以尝试以下正则表达式:
^(\d+)\s*(?:(\w+)?)(?:(\.\w+)?)$
详情:
^
- 行首
(\d+)
- 第 1 组:匹配一个数字
\s*
- 分隔第 1 组和第 2 组
(?:(\w+)?)
- 第 2 组(可选):匹配任何单词字符
(?:(\.\w+)?)
- 第 3 组(可选):匹配字符 .和任何单词字符
$
- 行尾
我正在尝试捕获并替换文件名,例如 000035 ZSMS_1.mp3 还有一个像这样的文件 000035 1欧姆纳 (我基本上是在尝试重新排序它们,使它们看起来像 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 ZSMS_1.mp3"
}
]
000035 1OMNA:
[
{
"groups": [
"000035",
"1OMNA",
""
],
"match": "000035 1OMNA"
}
]
^(\d+) (.*?)(\..*$)?
000035 ZSMS_1.mp3:
[
{
"groups": [
"000035",
"",
""
],
"match": "000035 "
}
]
000035 1OMNA:
[
{
"groups": [
"000035",
"",
""
],
"match": "000035 "
}
]
您可以使用
^(\d+)\h+(.*?)(\.[^.]*)?$
详情
^
- 字符串开头(\d+)
- 第 1 组:一个或多个数字\h+
- 1+ horizontal whitespaces(为了更好的正则表达式引擎 cross-compatibility,你可以使用[^\S\r\n]+
或者只是[ \t]+
来匹配选项卡或 space)(.*?)
- 第 2 组:除换行字符外的零个或多个字符,尽可能少(\.[^.]*)?
- 一个可选的捕获组 #3:一个点,然后是.
以外的 0 个或更多字符,尽可能多$
- 字符串结尾。
您可以尝试以下正则表达式:
^(\d+)\s*(?:(\w+)?)(?:(\.\w+)?)$
详情:
^
- 行首(\d+)
- 第 1 组:匹配一个数字\s*
- 分隔第 1 组和第 2 组(?:(\w+)?)
- 第 2 组(可选):匹配任何单词字符(?:(\.\w+)?)
- 第 3 组(可选):匹配字符 .和任何单词字符$
- 行尾