{ "info": { "author": "Bogdan Popa", "author_email": "bogdan@defn.io", "bugtrack_url": null, "classifiers": [], "description": "# cursive_re\n\nReadable regular expressions for Python 3.6 and up.\n\n## Installation\n\n pip install cursive_re\n\n## Examples\n\n``` python\n>>> from cursive_re import *\n\n>>> hash = text('#')\n>>> hexdigit = any_of(in_range('0', '9') + in_range('a', 'f') + in_range('A', 'F'))\n>>> hexcolor = (\n... beginning_of_line() + hash +\n... group(repeated(hexdigit, exactly=6) | repeated(hexdigit, exactly=3)) +\n... end_of_line()\n... )\n>>> str(hexcolor)\n'^\\\\#([a-f0-9]{6}|[a-f0-9]{3})$'\n\n>>> hexcolor_re = compile(hexcolor)\nre.compile('^\\\\#([a-f0-9]{6}|[a-f0-9]{3})$')\n\n>>> hexcolor_re.match('#fff')\n\n\n>>> hexcolor_re.match('#ffff') is None\nTrue\n\n>>> hexcolor_re.match('#ffffff')\n\n\n>>> domain_name = one_or_more(any_of(in_range('a', 'z') + in_range('0', '9') + text('-')))\n>>> domain = domain_name + zero_or_more(text('.') + domain_name)\n>>> path_segment = zero_or_more(none_of('/'))\n>>> path = zero_or_more(text('/') + path_segment)\n>>> url = (\n... group(one_or_more(any_of(in_range('a', 'z'))), name='scheme') + text('://') +\n... group(domain, name='domain') +\n... group(path, name='path')\n... )\n>>> str(url)\n'(?P[a-z]+)://(?P[a-z0-9\\-]+(?:\\.[a-z0-9\\-]+)*)(?P(?:/[^/]*)*)'\n```\n\n## Reference\n\n### `cursive_re.compile`\n\nCompile a cursive_re expression to a real regular expression.\n\n\n### `cursive_re.beginning_of_line`\n\nMatches the beginning of a line.\n\nExamples:\n\n >>> str(beginning_of_line())\n '^'\n\n\n### `cursive_re.end_of_line`\n\nMatches the end of a line.\n\nExamples:\n\n >>> str(end_of_line())\n '$'\n\n\n### `cursive_re.anything`\n\nMatches any character.\n\nExamples:\n\n >>> str(anything())\n '.'\n\n\n### `cursive_re.literal`\n\nInserts a literal regular expression.\n\nExamples:\n\n >>> str(literal(r\"\\A\\w\"))\n '\\\\A\\\\w'\n\n\n### `cursive_re.text`\n\nMatches the given string exactly, escaping any special characters.\n\nExamples:\n\n >>> str(text(\"abc\"))\n 'abc'\n\n\n### `cursive_re.any_of`\n\nMatches any of the given characters.\n\nExamples:\n\n >>> str(any_of(\"ab\"))\n '[ab]'\n\n >>> str(any_of(text(\"ab\")))\n '[ab]'\n\n >>> str(any_of(text(\"[]\")))\n '[\\\\[\\\\]]'\n\n\n### `cursive_re.none_of`\n\nMatches none of the given characters.\n\nExamples:\n\n >>> str(none_of(\"ab\"))\n '[^ab]'\n\n >>> str(none_of(text(\"ab\")))\n '[^ab]'\n\n >>> str(none_of(text(\"[]\")))\n '[^\\\\[\\\\]]'\n\n\n### `cursive_re.in_range`\n\nMatches a character in the given range.\n\nExamples:\n\n >>> str(in_range(\"a\", \"z\"))\n 'a-z'\n\n\n### `cursive_re.zero_or_more`\n\nMatches zero or more of the given expr.\n\nExamples:\n\n >>> str(zero_or_more(\"a\"))\n '(?:a)*'\n\n >>> str(zero_or_more(text(\"a\")))\n '(?:a)*'\n\n >>> str(zero_or_more(text(\"abc\")))\n '(?:abc)*'\n\n >>> str(zero_or_more(group(text(\"abc\"))))\n '(abc)*'\n\n\n### `cursive_re.one_or_more`\n\nMatches one or more of the given expr.\n\nExamples:\n\n >>> str(one_or_more(\"a\"))\n '(?:a)+'\n\n >>> str(one_or_more(text(\"a\")))\n '(?:a)+'\n\n >>> str(one_or_more(group(text(\"abc\"))))\n '(abc)+'\n\n\n### `cursive_re.maybe`\n\nMatches an expr if present.\n\nExamples:\n\n >>> str(maybe(\"abc\"))\n '(?:abc)?'\n\n >>> str(maybe(text(\"abc\")))\n '(?:abc)?'\n\n >>> str(maybe(group(text(\"abc\"))))\n '(abc)?'\n\n >>> str(maybe(any_of(\"abc\")))\n '[abc]?'\n\n\n### `cursive_re.repeated`\n\nMatches an expr repeated an exact number of times.\n\nExamples:\n\n >>> str(repeated(\"a\", exactly=5))\n '(?:a){5}'\n\n >>> str(repeated(text(\"a\"), exactly=5))\n '(?:a){5}'\n\n >>> str(repeated(text(\"a\"), at_least=1))\n '(?:a){1,}'\n\n >>> str(repeated(text(\"a\"), at_most=5))\n '(?:a){0,5}'\n\n >>> str(repeated(text(\"a\"), at_least=2, at_most=5, greedy=False))\n '(?:a){2,5}?'\n\n\n### `cursive_re.group`\n\nDenotes a group whose contents can be retrieved after a match\nis performed.\n\nExamples:\n\n >>> str(group(text(\"a\")))\n '(a)'\n\n >>> str(group(any_of(\"abc\"), name=\"chars\"))\n '(?P[abc])'\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "cursive-re", "package_url": "https://pypi.org/project/cursive-re/", "platform": "", "project_url": "https://pypi.org/project/cursive-re/", "project_urls": null, "release_url": "https://pypi.org/project/cursive-re/0.0.4/", "requires_dist": [ "flake8; extra == 'dev'", "flake8-bugbear; extra == 'dev'", "flake8-quotes; extra == 'dev'", "isort; extra == 'dev'", "bumpversion; extra == 'dev'", "mypy; extra == 'dev'", "twine; extra == 'dev'", "pytest; extra == 'dev'", "pytest-cov; extra == 'dev'" ], "requires_python": ">=3.6", "summary": "Readable regular expressions for Python 3.6 and up.", "version": "0.0.4" }, "last_serial": 4555805, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "c4a65fd605d74fd11f452bae6c723030", "sha256": "d710c07929d9741dae9a88003f894813cec18624e733b511ccd8b7509c459b3d" }, "downloads": -1, "filename": "cursive_re-0.0.0-py3-none-any.whl", "has_sig": true, "md5_digest": "c4a65fd605d74fd11f452bae6c723030", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4699, "upload_time": "2018-10-22T06:15:54", "url": "https://files.pythonhosted.org/packages/88/e1/fe2ae8623b78f949cac269d28e6cce433d3507de3d2799951a1b258cc349/cursive_re-0.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "578be9533ec9fedfebc4a8c6b06b73e0", "sha256": "44b8448a29146dadb5b36352e5ba6e6c1998ae0a5877631f6634a5e508c8f1a8" }, "downloads": -1, "filename": "cursive_re-0.0.0.tar.gz", "has_sig": true, "md5_digest": "578be9533ec9fedfebc4a8c6b06b73e0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3742, "upload_time": "2018-10-22T06:15:57", "url": "https://files.pythonhosted.org/packages/49/01/1a03dfcb13c447a585b43bea6f116175c732a10c1442a537f796ee033cca/cursive_re-0.0.0.tar.gz" } ], "0.0.1": [ { "comment_text": "", "digests": { "md5": "7961d51f719e010e00f3b1acb06624b5", "sha256": "8e74552f5857e5bb7c7cbf34cc9acd3d6a0ece4ed4a062a84f8e6dc9c0bbaee0" }, "downloads": -1, "filename": "cursive_re-0.0.1-py3-none-any.whl", "has_sig": true, "md5_digest": "7961d51f719e010e00f3b1acb06624b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4694, "upload_time": "2018-10-22T09:12:23", "url": "https://files.pythonhosted.org/packages/b5/7a/1bc8bcc2e11ed892834aa403a012b4c49ef8a2fe098ee399725d4ad2fa31/cursive_re-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8eb9e12d85c7ca84b36e0d670c20a5cd", "sha256": "d3433e9413b74bacbc2ed8c30dde321a5aab581b197a535d0659625adb5b7d7a" }, "downloads": -1, "filename": "cursive_re-0.0.1.tar.gz", "has_sig": true, "md5_digest": "8eb9e12d85c7ca84b36e0d670c20a5cd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3737, "upload_time": "2018-10-22T09:12:25", "url": "https://files.pythonhosted.org/packages/1c/8d/94df0eb6eae17e61e8b23809241050084e0263ab164449ae0a0cfd1ddea6/cursive_re-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "360a26d2a64e1d1e0ae58848e7c07d64", "sha256": "c12166e4896464840c9e3c47fe37147fb2d595f43a600cb89106e7a7163516b8" }, "downloads": -1, "filename": "cursive_re-0.0.2-py3-none-any.whl", "has_sig": true, "md5_digest": "360a26d2a64e1d1e0ae58848e7c07d64", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5260, "upload_time": "2018-10-22T09:52:38", "url": "https://files.pythonhosted.org/packages/16/35/3df2e7b38ad43a300f9d6f93ea6ed8e8451288ef9a68939ed08ef5ce7aca/cursive_re-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9fc6dfd5d84d7873674dab9632853af4", "sha256": "63389ea84c09f06074ec7ab231512ab9fad3d2307a81447e67dd5900b05fd67d" }, "downloads": -1, "filename": "cursive_re-0.0.2.tar.gz", "has_sig": true, "md5_digest": "9fc6dfd5d84d7873674dab9632853af4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4402, "upload_time": "2018-10-22T09:52:39", "url": "https://files.pythonhosted.org/packages/5e/3e/26c23aecfe193ebbf89755e78d25487d94c47d0af508cf04782e30b36db2/cursive_re-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "3f9727f0619612d6822c847b823b41b1", "sha256": "c10c9a35ca59b201ff7acdc6bdbdeeaf3ad88779d681ea9b25db27691b5918b7" }, "downloads": -1, "filename": "cursive_re-0.0.3-py3-none-any.whl", "has_sig": true, "md5_digest": "3f9727f0619612d6822c847b823b41b1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5342, "upload_time": "2018-10-22T10:10:51", "url": "https://files.pythonhosted.org/packages/23/10/e55c8bac1a602e255966237ffd2458e51773f061be500be9d448e1e26a58/cursive_re-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f70348815d8acf81b269da1ac9b0801d", "sha256": "61abe50b2071382407d44fb8286d65a4c9d0b79bd105282be06c30bf3ed15066" }, "downloads": -1, "filename": "cursive_re-0.0.3.tar.gz", "has_sig": true, "md5_digest": "f70348815d8acf81b269da1ac9b0801d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4542, "upload_time": "2018-10-22T10:10:53", "url": "https://files.pythonhosted.org/packages/5a/d7/108072bace528c9bff1f097809010a8a7c7a3740fac17294ea2c4458b2ae/cursive_re-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "e1c37b35f32f47b68f392bc5e2bed830", "sha256": "36008331e91e5d3c96ecb6701f12c30fc815f2aecd782a0cebd10d73a0a7f11c" }, "downloads": -1, "filename": "cursive_re-0.0.4-py3-none-any.whl", "has_sig": true, "md5_digest": "e1c37b35f32f47b68f392bc5e2bed830", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5351, "upload_time": "2018-12-03T13:40:39", "url": "https://files.pythonhosted.org/packages/be/2c/c9c5a4145fe61aef4a3bf7e9028566c0563971b5798efefb6fd5949ee825/cursive_re-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "64c9e6f05d85c174c0ce68cb0587fb8c", "sha256": "76d95b552deb2f531b4d07fdfdc258e5f1d0f84bdb993cc954e35d30086ba0f8" }, "downloads": -1, "filename": "cursive_re-0.0.4.tar.gz", "has_sig": true, "md5_digest": "64c9e6f05d85c174c0ce68cb0587fb8c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4565, "upload_time": "2018-12-03T13:40:41", "url": "https://files.pythonhosted.org/packages/35/db/97138bcacdf133c4039092438824250d8b52463541281e0beb79c034b75c/cursive_re-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e1c37b35f32f47b68f392bc5e2bed830", "sha256": "36008331e91e5d3c96ecb6701f12c30fc815f2aecd782a0cebd10d73a0a7f11c" }, "downloads": -1, "filename": "cursive_re-0.0.4-py3-none-any.whl", "has_sig": true, "md5_digest": "e1c37b35f32f47b68f392bc5e2bed830", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5351, "upload_time": "2018-12-03T13:40:39", "url": "https://files.pythonhosted.org/packages/be/2c/c9c5a4145fe61aef4a3bf7e9028566c0563971b5798efefb6fd5949ee825/cursive_re-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "64c9e6f05d85c174c0ce68cb0587fb8c", "sha256": "76d95b552deb2f531b4d07fdfdc258e5f1d0f84bdb993cc954e35d30086ba0f8" }, "downloads": -1, "filename": "cursive_re-0.0.4.tar.gz", "has_sig": true, "md5_digest": "64c9e6f05d85c174c0ce68cb0587fb8c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4565, "upload_time": "2018-12-03T13:40:41", "url": "https://files.pythonhosted.org/packages/35/db/97138bcacdf133c4039092438824250d8b52463541281e0beb79c034b75c/cursive_re-0.0.4.tar.gz" } ] }