8

我正在使用软件使用正则表达式编辑歌曲。这就是我所拥有的:

吉米吃世界 - 中间 (.mp3)

我想做的是删除“-”之前的空格和之后的所有内容,所以我只剩下“Jimmy Eat World”

我想要执行的另一个操作是删除“-”之前的所有内容以及后面的空格,这样我就只剩下“中间”了

4

4 回答 4

11

这很容易。

第一个动作- 删除破折号后的任何内容:

  • 替换/ -.*/为空字符串。(请注意,破折号之前有一个实际空格。)
  • 如果破折号之前可能有多个空格,则可以使用此变体:(/ +-.*/再次在 之前使用实际空格+)。

第二个动作- 删除任何东西到破折号:

  • 替换/.* - /为空字符串。(请注意,破折号后有一个实际空格。)

笔记

  • 上面的斜线/不是正则表达式的一部分,您不必输入它们。它们在这里用作视觉分隔符。
  • .意思是“任何字符”(换行符除外,文件名中无论如何都不会有)
  • *意思是“上一项,零到任意次数”
  • +意思是“前一项,至少一次,可能是任意次数”
  • 正则表达式中的大多数其他字符表示它们所说的意思,因此正则表达式中的空格将匹配字符串中的空格。值得注意的例外是^, $, ., +, *, ?, {, }, (, ), [, ], |and \,它们有自己的特殊含义,但在您的情况下没有更深的关注。
于 2013-01-06T16:46:24.853 回答
2

您的程序是否能够提取正则表达式中括号包围的组?如果是这样,您可以在这里创建一个像这样的表达式(示例是用 Python 编写的):

In [1]: import re    

In [2]: match_obj = re.match(r'(.+?)\s*-\s*(.+?)\.mp3', 'Jimmy Eat World - The Middle.mp3')

In [3]: match_obj.group(1)
Out[3]: 'Jimmy Eat World'

In [4]: match_obj.group(2)
Out[4]: 'The Middle'
于 2013-01-06T17:09:13.257 回答
1

这将匹配被空格包围的第一个连字符、空格以及它之后的所有内容(替换为空字符串):

\s\-\s.*

这将匹配被空格包围的第一个连字符、空格和它之前的所有内容:

.*\s\-\s

这将匹配它(.mp3)之前的文字和一个可选的空格(任意数量):

\s*\(\.mp3\)
于 2013-01-06T16:47:39.893 回答
0

要检索歌曲名称,请尝试替换.*-\s*为空。然后什么都不换\s*\(\.mp3\)

如果您有各种文件类型,例如 MP3 和 WMA,您可以将其他文件类型添加到第二个正则表达式,如下所示\s*\(\.(mp3|wma|avi|mpg|mpeg)\)

于 2013-01-06T16:48:27.350 回答