regex - 如何捕获带或不带扩展名的文件名
问题描述
我正在尝试捕获和替换像 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 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+)
- 第一组:一位或多位数字\h+
- 1+ 水平空格(为了更好的正则表达式引擎交叉兼容性,您可以使用[^\S\r\n]+
或仅[ \t]+
匹配制表符或空格)(.*?)
- 第 2 组:除换行符之外的零个或多个字符,尽可能少(\.[^.]*)?
- 一个可选的捕获组 #3:一个点,然后是 0 个或更多字符,而不是.
尽可能多的字符$
- 字符串结束。
推荐阅读
- javascript - 将 2 个 JavaScript 合并为 1 个
- algorithm - 缓存抖动效应因大数据大小而降低
- c# - Unity 复制到 Android 上的剪贴板
- python - 创建填充表单的新模型对象
- assembly - 为什么使用 ebp 比 esp 寄存器在堆栈上定位参数更好?
- amazon-web-services - 在 AWS 中使用 WaitCondtion 与创建策略
- dart - 如何防止小部件在 ListView 滚动上重新渲染
- react-native - 在 Axios React native 中传递 Array/Object 作为参数
- php - Elementor Pro 表单到 webhook 集成的示例
- python - 过滤灰度指纹扫描图像和二进制文件