{ "metadata": { "name": "change-subtitle" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# \u6279\u91cf\u66f4\u6539\u5b57\u5e55\u6587\u4ef6\u540d\n", "\n", "\u8fdc\u7a0b\u64ad\u653ePC\u4e0a\u7684\u89c6\u5c4f\u65f6, \u64ad\u653e\u5668\u4e0d\u8ba4\u5e26\u6709\u540e\u7f00\u7684\u5b57\u5e55\u6587\u4ef6. \u6bd4\u5982:\n", "\n", "* `[YYDM-11FANS][Hellsing_OVA][BDRIP][01][x264_AAC][720P][CD05817F].mp4`\n", "* `[YYDM-11FANS][Hellsing_OVA][BDRIP][01][x264_AAC][720P][CD05817F].RP-sc.ass`\n", "\n", "\u9700\u8981\u628a\u5b57\u5e55\u540e\u7f00`.RP-sc`\u53bb\u6389." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import os\n", "import re\n", "\n", "root = 'subtitle'\n", "for source in os.listdir(root):\n", " target = re.sub(r'\\][^\\]]*ass', '].ass', source)\n", " os.rename(os.path.join(root, source), os.path.join(root, target))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## \u6b63\u5219\u8868\u8fbe\u5f0f(regular expression / regex)\n", "\n", "\u53c2\u8003\u8d44\u6599: [Python\u6b63\u5219\u8868\u8fbe\u5f0f\u64cd\u4f5c\u6307\u5357](http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97)\n", "\n", "### \u5143\u5b57\u7b26\n", "\n", "`. ^ $ * + ? { [ ] \\ | ( )`\n", "\n", "> \u6211\u4eec\u9996\u5148\u8003\u5bdf\u7684\u5143\u5b57\u7b26\u662f\"[\" \u548c \"]\"\u3002\u5b83\u4eec\u5e38\u7528\u6765\u6307\u5b9a\u4e00\u4e2a\u5b57\u7b26\u7c7b\u522b\uff0c\u6240\u8c13\u5b57\u7b26\u7c7b\u522b\u5c31\u662f\u4f60\u60f3\u5339\u914d\u7684\u4e00\u4e2a\u5b57\u7b26\u96c6\u3002\u5b57\u7b26\u53ef\u4ee5\u5355\u4e2a\u5217\u51fa\uff0c\u4e5f\u53ef\u4ee5\u7528\u201c-\u201d\u53f7\u5206\u9694\u7684\u4e24\u4e2a\u7ed9\u5b9a\u5b57\u7b26\u6765\u8868\u793a\u4e00\u4e2a\u5b57\u7b26\u533a\u95f4\u3002\u4f8b\u5982\uff0c[abc] \u5c06\u5339\u914d\"a\", \"b\", \u6216 \"c\"\u4e2d\u7684\u4efb\u610f\u4e00\u4e2a\u5b57\u7b26\uff1b\u4e5f\u53ef\u4ee5\u7528\u533a\u95f4[a-c]\u6765\u8868\u793a\u540c\u4e00\u5b57\u7b26\u96c6\uff0c\u548c\u524d\u8005\u6548\u679c\u4e00\u81f4\u3002\u5982\u679c\u4f60\u53ea\u60f3\u5339\u914d\u5c0f\u5199\u5b57\u6bcd\uff0c\u90a3\u4e48 RE \u5e94\u5199\u6210 [a-z].\n", "\n", "> \u7b26\u5728\u7c7b\u522b\u91cc\u5e76\u4e0d\u8d77\u4f5c\u7528\u3002\u4f8b\u5982\uff0c[akm`$`]\u5c06\u5339\u914d\u5b57\u7b26\"a\", \"k\", \"m\", \u6216 \"`$`\" \u4e2d\u7684\u4efb\u610f\u4e00\u4e2a\uff1b\"`$`\"\u901a\u5e38\u7528\u4f5c\u5143\u5b57\u7b26\uff0c\u4f46\u5728\u5b57\u7b26\u7c7b\u522b\u91cc\uff0c\u5176\u7279\u6027\u88ab\u9664\u53bb\uff0c\u6062\u590d\u6210\u666e\u901a\u5b57\u7b26\u3002\n", "\n", "> \u4ee5\u7528\u8865\u96c6\u6765\u5339\u914d\u4e0d\u5728\u533a\u95f4\u8303\u56f4\u5185\u7684\u5b57\u7b26\u3002\u5176\u505a\u6cd5\u662f\u628a\"^\"\u4f5c\u4e3a\u7c7b\u522b\u7684\u9996\u4e2a\u5b57\u7b26\uff1b\u5176\u5b83\u5730\u65b9\u7684\"^\"\u53ea\u4f1a\u7b80\u5355\u5339\u914d \"^\"\u5b57\u7b26\u672c\u8eab\u3002\u4f8b\u5982\uff0c[^5] \u5c06\u5339\u914d\u9664 \"5\" \u4e4b\u5916\u7684\u4efb\u610f\u5b57\u7b26\u3002\n", "\n", "> \u6700\u91cd\u8981\u7684\u5143\u5b57\u7b26\u662f\u53cd\u659c\u6760\"\\\"\u3002 \u505a\u4e3a Python \u4e2d\u7684\u5b57\u7b26\u4e32\u5b57\u6bcd\uff0c\u53cd\u659c\u6760\u540e\u9762\u53ef\u4ee5\u52a0\u4e0d\u540c\u7684\u5b57\u7b26\u4ee5\u8868\u793a\u4e0d\u540c\u7279\u6b8a\u610f\u4e49\u3002\u5b83\u4e5f\u53ef\u4ee5\u7528\u4e8e\u53d6\u6d88\u6240\u6709\u7684\u5143\u5b57\u7b26\uff0c\u8fd9\u6837\u4f60\u5c31\u53ef\u4ee5\u5728\u6a21\u5f0f\u4e2d\u5339\u914d\u5b83\u4eec\u4e86\u3002\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u5982\u679c\u4f60\u9700\u8981\u5339\u914d\u5b57\u7b26 \"[\" \u6216 \"\\\"\uff0c\u4f60\u53ef\u4ee5\u5728\u5b83\u4eec\u4e4b\u524d\u7528\u53cd\u659c\u6760\u6765\u53d6\u6d88\u5b83\u4eec\u7684\u7279\u6b8a\u610f\u4e49\uff1a \\[ \u6216 \\\\\u3002\n", "\n", "> \u7528 \"\\\" \u5f00\u59cb\u7684\u7279\u6b8a\u5b57\u7b26\u6240\u8868\u793a\u7684\u9884\u5b9a\u4e49\u5b57\u7b26\u96c6\u901a\u5e38\u662f\u5f88\u6709\u7528\u7684\uff0c\u8c61\u6570\u5b57\u96c6\uff0c\u5b57\u6bcd\u96c6\uff0c\u6216\u5176\u5b83\u975e\u7a7a\u5b57\u7b26\u96c6\u3002\u4e0b\u5217\u662f\u53ef\u7528\u7684\u9884\u8bbe\u7279\u6b8a\u5b57\u7b26\uff1a\n", "\n", "
\\d  \u5339\u914d\u4efb\u4f55\u5341\u8fdb\u5236\u6570\uff1b\u5b83\u76f8\u5f53\u4e8e\u7c7b [0-9]\u3002\n",
      "\\D  \u5339\u914d\u4efb\u4f55\u975e\u6570\u5b57\u5b57\u7b26\uff1b\u5b83\u76f8\u5f53\u4e8e\u7c7b [^0-9]\u3002\n",
      "\\s  \u5339\u914d\u4efb\u4f55\u7a7a\u767d\u5b57\u7b26\uff1b\u5b83\u76f8\u5f53\u4e8e\u7c7b  [ \\t\\n\\r\\f\\v]\u3002\n",
      "\\S  \u5339\u914d\u4efb\u4f55\u975e\u7a7a\u767d\u5b57\u7b26\uff1b\u5b83\u76f8\u5f53\u4e8e\u7c7b [^ \\t\\n\\r\\f\\v]\u3002\n",
      "\\w  \u5339\u914d\u4efb\u4f55\u5b57\u6bcd\u6570\u5b57\u5b57\u7b26\uff1b\u5b83\u76f8\u5f53\u4e8e\u7c7b [a-zA-Z0-9_]\u3002\n",
      "\\W  \u5339\u914d\u4efb\u4f55\u975e\u5b57\u6bcd\u6570\u5b57\u5b57\u7b26\uff1b\u5b83\u76f8\u5f53\u4e8e\u7c7b [^a-zA-Z0-9_]\u3002
\n", "\n", "### \u91cd\u590d\n", "\n", "
*     \u51fa\u73b0\u4efb\u610f\u591a\u6b21.\n",
      "+     \u51fa\u73b0\u81f3\u5c11\u4e00\u6b21.\n",
      "{m,n} \u51fa\u73b0\u81f3\u5c11m\u6b21, \u81f3\u591an\u6b21.
\n", "\n", "### \u539f\u59cb\u5b57\u7b26\u4e32" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print 'foo\\\\bar'\n", "print r'foo\\\\bar'" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "foo\\bar\n", "foo\\\\bar\n" ] } ], "prompt_number": 2 } ], "metadata": {} } ] }