正则表达式:匹配 ([^A-Z]*) 但如果找到 "foo" 则停止
RegEX: match ([^A-Z]*) but stop if you find "foo"
我 运行 遇到了一个我不知道如何解决的问题。
我有一系列的视频文件,名称如下:
FooBar-tooGGG1 - s01e01 - (HW) - SomeText.mp4
因此我必须确保在大写字母之前添加空格,但仅在出现“- s01e”之前添加(因此忽略文本的其余部分):
Foo Bar-too GGG 1 - s01e01 - (HW) - SomeText.mp4
环顾四周,我偶然发现了这些 RegEX:
(?-i)([A-Z]{1})([^A-Z]*)
替换为:
.+?(?=abc)
或
\w*(?<!foo)bar
或
^(?:(?!foo).)*
这在 Regex101 上发挥了一点作用,但我不能只得到两种类型的结果:
(?-i)([A-Z]{1})([^A-Z]*.+?(?= - s01e))
或
(?-i)([A-Z]{1})([^A-Z]*)/g
分别为:
F ooBar-tooGGG1 - s01e01 - (HW) - SomeText.mp4
和
Foo Bar-too GGG1 - s01e01 - ( H W) - Some Text.mp4
我不太擅长正则表达式,但从今天早上开始我一直在尝试一切,放在中间,使用 +?而不是 * o。 *等
正则表达式引擎:PCRE2; PCRE。
如果批量重命名不适合作为软件,我还有:
FlexibleRenamer 和 RegexRenamer(也适用于 Windows)
在批量重命名实用程序中,您可以使用
(?<=[a-z])(?=[A-Z])(?=.*\s[sS]\d{1,2}[eE]\d)/g
将替换设置为 space。确保已设置 v2
复选框。
您也可以使用 Powershell(CTRL+Esc
,开始输入 Powershell
并按 ENTER):
cd 'FILES_FOLDER_PATH_HERE'
$files = Get-ChildItem -Filter '*.mp4'
$files | Rename-Item -NewName {$_.name -creplace '(?<=\p{Ll})(?=\p{Lu})(?=.*\s[sS]\d{1,2}[eE]\d)',' ' }
这里是 regex demo.
详情
cd 'FILES_FOLDER_PATH_HERE'
- 移动到包含您的文件的文件夹
$files = Get-ChildItem -Filter '*.mp4'
- 获取该文件夹中扩展名为 mp4
的所有文件
$files | Rename-Item -NewName {$_.name -creplace '(?<=\p{Ll})(?=\p{Lu})(?=.*\s[sS]\d{1,2}[eE]\d)',' ' }
使用区分大小写(由于 -creplace
)正则表达式搜索和替换重命名文件。
正则表达式匹配
(?<=\p{Ll})
- 一个紧跟小写字母的位置(\p{Ll}
是 [a-z]
的 Unicode 变体)
(?=\p{Lu})
- 紧跟大写字母的位置(\p{Lu}
是 [A-Z]
的 Unicode 变体)
(?=.*\s[sS]\d{1,2}[eE]\d)
- 紧随其后的位置
.*
- 任何文本(换行符除外)
\s
- 白space
[sS]
- s
或 S
\d{1,2}
- 一位或两位数
[eE]
- e
或 E
\d
- 一个数字。
我 运行 遇到了一个我不知道如何解决的问题。 我有一系列的视频文件,名称如下:
FooBar-tooGGG1 - s01e01 - (HW) - SomeText.mp4
因此我必须确保在大写字母之前添加空格,但仅在出现“- s01e”之前添加(因此忽略文本的其余部分):
Foo Bar-too GGG 1 - s01e01 - (HW) - SomeText.mp4
环顾四周,我偶然发现了这些 RegEX:
(?-i)([A-Z]{1})([^A-Z]*)
替换为:
.+?(?=abc)
或
\w*(?<!foo)bar
或
^(?:(?!foo).)*
这在 Regex101 上发挥了一点作用,但我不能只得到两种类型的结果:
(?-i)([A-Z]{1})([^A-Z]*.+?(?= - s01e))
或
(?-i)([A-Z]{1})([^A-Z]*)/g
分别为:
F ooBar-tooGGG1 - s01e01 - (HW) - SomeText.mp4
和
Foo Bar-too GGG1 - s01e01 - ( H W) - Some Text.mp4
我不太擅长正则表达式,但从今天早上开始我一直在尝试一切,放在中间,使用 +?而不是 * o。 *等
正则表达式引擎:PCRE2; PCRE。 如果批量重命名不适合作为软件,我还有: FlexibleRenamer 和 RegexRenamer(也适用于 Windows)
在批量重命名实用程序中,您可以使用
(?<=[a-z])(?=[A-Z])(?=.*\s[sS]\d{1,2}[eE]\d)/g
将替换设置为 space。确保已设置 v2
复选框。
您也可以使用 Powershell(CTRL+Esc
,开始输入 Powershell
并按 ENTER):
cd 'FILES_FOLDER_PATH_HERE'
$files = Get-ChildItem -Filter '*.mp4'
$files | Rename-Item -NewName {$_.name -creplace '(?<=\p{Ll})(?=\p{Lu})(?=.*\s[sS]\d{1,2}[eE]\d)',' ' }
这里是 regex demo.
详情
cd 'FILES_FOLDER_PATH_HERE'
- 移动到包含您的文件的文件夹$files = Get-ChildItem -Filter '*.mp4'
- 获取该文件夹中扩展名为mp4
的所有文件$files | Rename-Item -NewName {$_.name -creplace '(?<=\p{Ll})(?=\p{Lu})(?=.*\s[sS]\d{1,2}[eE]\d)',' ' }
使用区分大小写(由于-creplace
)正则表达式搜索和替换重命名文件。
正则表达式匹配
(?<=\p{Ll})
- 一个紧跟小写字母的位置(\p{Ll}
是[a-z]
的 Unicode 变体)(?=\p{Lu})
- 紧跟大写字母的位置(\p{Lu}
是[A-Z]
的 Unicode 变体)(?=.*\s[sS]\d{1,2}[eE]\d)
- 紧随其后的位置.*
- 任何文本(换行符除外)\s
- 白space[sS]
-s
或S
\d{1,2}
- 一位或两位数[eE]
-e
或E
\d
- 一个数字。