diff --git a/pydantic/networks.py b/pydantic/networks.py
--- a/pydantic/networks.py
+++ b/pydantic/networks.py
@@ -61,7 +61,7 @@ def url_regex() -> Pattern[str]:
             r'(?P<domain>[^\s/:?#]+)'  # domain, validation occurs later
             r')?'
             r'(?::(?P<port>\d+))?'  # port
-            r'(?P<path>/[^\s?]*)?'  # path
+            r'(?P<path>/[^\s?#]*)?'  # path
             r'(?:\?(?P<query>[^\s#]+))?'  # query
             r'(?:#(?P<fragment>\S+))?',  # fragment
             re.IGNORECASE,

diff --git a/tests/test_networks.py b/tests/test_networks.py
--- a/tests/test_networks.py
+++ b/tests/test_networks.py
@@ -199,6 +199,15 @@ def test_at_in_path():
     assert url.path == '/@handle'
 
 
+def test_fragment_without_query():
+    url = validate_url('https://pydantic-docs.helpmanual.io/usage/types/#constrained-types')
+    assert url.scheme == 'https'
+    assert url.host == 'pydantic-docs.helpmanual.io'
+    assert url.path == '/usage/types/'
+    assert url.query is None
+    assert url.fragment == 'constrained-types'
+
+
 @pytest.mark.parametrize(
     'value',
     [

AnyUrl does not recognize fragment without query string
### Checks

* [x] I added a descriptive title to this issue
* [x] I have searched (google, github) for similar issues and couldn't find anything
* [x] I have read and followed [the docs](https://pydantic-docs.helpmanual.io/) and still think this is a bug

<!-- Sorry to sound so draconian, but every second saved replying to issues is time spend improving pydantic :-) -->

# Bug


Output of `python -c "import pydantic.utils; print(pydantic.utils.version_info())"`:
```
             pydantic version: 1.7.3
            pydantic compiled: True
                 install path: /Users/andwhite/Projects/lipy-sso_trunk/build/lipy-sso/environments/development-venv/lib/python3.7/site-packages/pydantic
               python version: 3.7.7 (default, Mar 10 2020, 16:11:21)  [Clang 11.0.0 (clang-1100.0.33.12)]
                     platform: Darwin-19.6.0-x86_64-i386-64bit
     optional deps. installed: ['typing-extensions']
```
<!-- or if you're using pydantic prior to v1.3, manually include: OS, python version and pydantic version -->

<!-- Please read the [docs](https://pydantic-docs.helpmanual.io/) and search through issues to
confirm your bug hasn't already been reported. -->

<!-- Where possible please include a self-contained code snippet describing your bug: -->

RFC3986 indicates that a URI with a fragment but not a query is valid, but pydantic does not parse this correctly, instead treating the fragment as part of the path:

```py
from pydantic import AnyUrl, BaseModel


class Model(BaseModel):
    v: AnyUrl


def test_url_fragment_without_query():
    url = Model(v='https://pydantic-docs.helpmanual.io/usage/types/#constrained-types').v
    assert url.query is None
    assert url.fragment == 'constrainted-types'
```

Pytest output:
```
=========================================== test session starts ===========================================
platform darwin -- Python 3.7.7, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/Users/andwhite/Projects/lipy-sso_trunk/lipy-sso/.hypothesis/examples')
rootdir: /Users/andwhite/Projects/lipy-sso_trunk/lipy-sso, inifile: setup.cfg
plugins: xdist-1.29.0, requests-mock-1.8.0, html-2.0.1, forked-0.2, lipy-config-base-21.0.8, hypothesis-4.40.0, metadata-1.8.0, cov-2.8.1, lipy-sso-2.1.0
collected 1 item                                                                                          

repro.py F                                                                                          [100%]

================================================ FAILURES =================================================
_____________________________________ test_url_fragment_without_query _____________________________________

    def test_url_fragment_without_query():
        url = Model(v='https://pydantic-docs.helpmanual.io/usage/types/#constrained-types').v
        assert url.query is None
>       assert url.fragment == 'constrainted-types'
E       AssertionError: assert None == 'constrainted-types'
E        +  where None = AnyUrl('https://pydantic-docs.helpmanual.io/usage/types/#constrained-types', scheme='https', host='pydantic-docs.helpmanual.io', tld='io', host_type='domain', path='/usage/types/#constrained-types').fragment

repro.py:11: AssertionError
============================================ 1 failed in 0.13s ============================================
```

tests/test_networks.py::test_fragment_without_query
tests/test_networks.py::test_any_url_success[http://example.org] tests/test_networks.py::test_any_url_success[http://test] tests/test_networks.py::test_any_url_success[http://localhost0] tests/test_networks.py::test_any_url_success[https://example.org/whatever/next/] tests/test_networks.py::test_any_url_success[postgres://user:pass@localhost:5432/app] tests/test_networks.py::test_any_url_success[postgres://just-user@localhost:5432/app] tests/test_networks.py::test_any_url_success[postgresql+psycopg2://postgres:postgres@localhost:5432/hatch] tests/test_networks.py::test_any_url_success[foo-bar://example.org] tests/test_networks.py::test_any_url_success[foo.bar://example.org] tests/test_networks.py::test_any_url_success[foo0bar://example.org] tests/test_networks.py::test_any_url_success[https://example.org] tests/test_networks.py::test_any_url_success[http://localhost1] tests/test_networks.py::test_any_url_success[http://localhost/] tests/test_networks.py::test_any_url_success[http://localhost:8000] tests/test_networks.py::test_any_url_success[http://localhost:8000/] tests/test_networks.py::test_any_url_success[https://foo_bar.example.com/] tests/test_networks.py::test_any_url_success[ftp://example.org] tests/test_networks.py::test_any_url_success[ftps://example.org] tests/test_networks.py::test_any_url_success[http://example.co.jp] tests/test_networks.py::test_any_url_success[http://www.example.com/a%C2%B1b] tests/test_networks.py::test_any_url_success[http://www.example.com/~username/] tests/test_networks.py::test_any_url_success[http://info.example.com?fred] tests/test_networks.py::test_any_url_success[http://info.example.com/?fred] tests/test_networks.py::test_any_url_success[http://xn--mgbh0fb.xn--kgbechtv/] tests/test_networks.py::test_any_url_success[http://example.com/blue/red%3Fand+green] tests/test_networks.py::test_any_url_success[http://www.example.com/?array%5Bkey%5D=value] tests/test_networks.py::test_any_url_success[http://xn--rsum-bpad.example.org/] tests/test_networks.py::test_any_url_success[http://123.45.67.8/] tests/test_networks.py::test_any_url_success[http://123.45.67.8:8329/] tests/test_networks.py::test_any_url_success[http://[2001:db8::ff00:42]:8329] tests/test_networks.py::test_any_url_success[http://[2001::1]:8329] tests/test_networks.py::test_any_url_success[http://[2001:db8::1]/] tests/test_networks.py::test_any_url_success[http://www.example.com:8000/foo] tests/test_networks.py::test_any_url_success[http://www.cwi.nl:80/%7Eguido/Python.html] tests/test_networks.py::test_any_url_success[https://www.python.org/\u043f\u0443\u0442\u044c] tests/test_networks.py::test_any_url_success[http://\u0430\u043d\u0434\u0440\u0435\u0439@example.com] tests/test_networks.py::test_any_url_success[https://example.com] tests/test_networks.py::test_any_url_success[https://exam_ple.com/] tests/test_networks.py::test_any_url_success[http://twitter.com/@handle/] tests/test_networks.py::test_any_url_invalid[http:///example.com/-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[https:///example.com/-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[http://.example.com:8000/foo-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[https://example.org\\-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[https://exampl$e.org-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[http://??-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[http://.-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[http://..-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[https://example.org tests/test_networks.py::test_any_url_invalid[$https://example.org-value_error.url.scheme-invalid tests/test_networks.py::test_any_url_invalid[../icons/logo.gif-value_error.url.scheme-invalid tests/test_networks.py::test_any_url_invalid[abc-value_error.url.scheme-invalid tests/test_networks.py::test_any_url_invalid[..-value_error.url.scheme-invalid tests/test_networks.py::test_any_url_invalid[/-value_error.url.scheme-invalid tests/test_networks.py::test_any_url_invalid[+http://example.com/-value_error.url.scheme-invalid tests/test_networks.py::test_any_url_invalid[ht*tp://example.com/-value_error.url.scheme-invalid tests/test_networks.py::test_any_url_invalid[ tests/test_networks.py::test_any_url_invalid[-value_error.any_str.min_length-ensure tests/test_networks.py::test_any_url_invalid[None-type_error.none.not_allowed-none tests/test_networks.py::test_any_url_invalid[http://2001:db8::ff00:42:8329-value_error.url.extra-URL tests/test_networks.py::test_any_url_invalid[http://[192.168.1.1]:8329-value_error.url.host-URL tests/test_networks.py::test_any_url_invalid[http://example.com:99999-value_error.url.port-URL tests/test_networks.py::test_any_url_parts tests/test_networks.py::test_url_repr tests/test_networks.py::test_ipv4_port tests/test_networks.py::test_ipv6_port tests/test_networks.py::test_int_domain tests/test_networks.py::test_co_uk tests/test_networks.py::test_user_no_password tests/test_networks.py::test_at_in_path tests/test_networks.py::test_http_url_success[http://example.org] tests/test_networks.py::test_http_url_success[http://example.org/foobar] tests/test_networks.py::test_http_url_success[http://example.org.] tests/test_networks.py::test_http_url_success[http://example.org./foobar] tests/test_networks.py::test_http_url_success[HTTP://EXAMPLE.ORG] tests/test_networks.py::test_http_url_success[https://example.org] tests/test_networks.py::test_http_url_success[https://example.org?a=1&b=2] tests/test_networks.py::test_http_url_success[https://example.org#a=3;b=3] tests/test_networks.py::test_http_url_success[https://foo_bar.example.com/] tests/test_networks.py::test_http_url_success[https://exam_ple.com/] tests/test_networks.py::test_http_url_success[https://example.xn--p1ai] tests/test_networks.py::test_http_url_success[https://example.xn--vermgensberatung-pwb] tests/test_networks.py::test_http_url_success[https://example.xn--zfr164b] tests/test_networks.py::test_http_url_invalid[ftp://example.com/-value_error.url.scheme-URL tests/test_networks.py::test_http_url_invalid[http://foobar/-value_error.url.host-URL tests/test_networks.py::test_http_url_invalid[http://localhost/-value_error.url.host-URL tests/test_networks.py::test_http_url_invalid[https://example.123-value_error.url.host-URL tests/test_networks.py::test_http_url_invalid[https://example.ab123-value_error.url.host-URL tests/test_networks.py::test_http_url_invalid[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-value_error.any_str.max_length-ensure tests/test_networks.py::test_coerse_url[ tests/test_networks.py::test_coerse_url[https://www.example.com-https://www.example.com] tests/test_networks.py::test_coerse_url[https://www.\u0430\u0440\u0440\u04cf\u0435.com/-https://www.xn--80ak6aa92e.com/] tests/test_networks.py::test_coerse_url[https://exampl\xa3e.org-https://xn--example-gia.org] tests/test_networks.py::test_coerse_url[https://example.\u73e0\u5b9d-https://example.xn--pbt977c] tests/test_networks.py::test_coerse_url[https://example.verm\xf6gensberatung-https://example.xn--vermgensberatung-pwb] tests/test_networks.py::test_coerse_url[https://example.\u0440\u0444-https://example.xn--p1ai] tests/test_networks.py::test_coerse_url[https://exampl\xa3e.\u73e0\u5b9d-https://xn--example-gia.xn--pbt977c] tests/test_networks.py::test_parses_tld[ tests/test_networks.py::test_parses_tld[https://www.example.com-com] tests/test_networks.py::test_parses_tld[https://www.example.com?param=value-com] tests/test_networks.py::test_parses_tld[https://example.\u73e0\u5b9d-xn--pbt977c] tests/test_networks.py::test_parses_tld[https://exampl\xa3e.\u73e0\u5b9d-xn--pbt977c] tests/test_networks.py::test_parses_tld[https://example.verm\xf6gensberatung-xn--vermgensberatung-pwb] tests/test_networks.py::test_parses_tld[https://example.\u0440\u0444-xn--p1ai] tests/test_networks.py::test_parses_tld[https://example.\u0440\u0444?param=value-xn--p1ai] tests/test_networks.py::test_postgres_dsns tests/test_networks.py::test_redis_dsns tests/test_networks.py::test_custom_schemes tests/test_networks.py::test_build_url[kwargs0-ws://foo@example.net] tests/test_networks.py::test_build_url[kwargs1-ws://foo:x@example.net] tests/test_networks.py::test_build_url[kwargs2-ws://example.net?a=b#c=d] tests/test_networks.py::test_build_url[kwargs3-http://example.net:1234] tests/test_networks.py::test_son tests/test_networks.py::test_address_valid[foobar@example.com-foobar-foobar@example.com] tests/test_networks.py::test_address_valid[s@muelcolvin.com-s-s@muelcolvin.com] tests/test_networks.py::test_address_valid[Samuel tests/test_networks.py::test_address_valid[foobar tests/test_networks.py::test_address_valid[ tests/test_networks.py::test_address_valid[foo.bar@example.com tests/test_networks.py::test_address_valid[foo tests/test_networks.py::test_address_valid[FOO tests/test_networks.py::test_address_valid[<FOOBAR@example.com> tests/test_networks.py::test_address_valid[\xf1o\xf1\xf3@example.com-\xf1o\xf1\xf3-\xf1o\xf1\xf3@example.com] tests/test_networks.py::test_address_valid[\u6211\u8cb7@example.com-\u6211\u8cb7-\u6211\u8cb7@example.com] tests/test_networks.py::test_address_valid[\u7532\u6590\u9ed2\u5ddd\u65e5\u672c@example.com-\u7532\u6590\u9ed2\u5ddd\u65e5\u672c-\u7532\u6590\u9ed2\u5ddd\u65e5\u672c@example.com] tests/test_networks.py::test_address_valid[\u0447\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430\u044f\u0449\u0438\u043a-\u0441-\u0430\u043f\u0435\u043b\u044c\u0441\u0438\u043d\u0430\u043c\u0438.\u0440\u0444@example.com-\u0447\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430\u044f\u0449\u0438\u043a-\u0441-\u0430\u043f\u0435\u043b\u044c\u0441\u0438\u043d\u0430\u043c\u0438.\u0440\u0444-\u0447\u0435\u0431\u0443\u0440\u0430\u0448\u043a\u0430\u044f\u0449\u0438\u043a-\u0441-\u0430\u043f\u0435\u043b\u044c\u0441\u0438\u043d\u0430\u043c\u0438.\u0440\u0444@example.com] tests/test_networks.py::test_address_valid[\u0909\u0926\u093e\u0939\u0930\u0923.\u092a\u0930\u0940\u0915\u094d\u0937@domain.with.idn.tld-\u0909\u0926\u093e\u0939\u0930\u0923.\u092a\u0930\u0940\u0915\u094d\u0937-\u0909\u0926\u093e\u0939\u0930\u0923.\u092a\u0930\u0940\u0915\u094d\u0937@domain.with.idn.tld] tests/test_networks.py::test_address_valid[foo.bar@example.com-foo.bar-foo.bar@example.com] tests/test_networks.py::test_address_valid[foo.bar@exam-ple.com tests/test_networks.py::test_address_valid[\u03b9\u03c9\u03ac\u03bd\u03bd\u03b7\u03c2@\u03b5\u03b5\u03c4\u03c4.gr-\u03b9\u03c9\u03ac\u03bd\u03bd\u03b7\u03c2-\u03b9\u03c9\u03ac\u03bd\u03bd\u03b7\u03c2@\u03b5\u03b5\u03c4\u03c4.gr] tests/test_networks.py::test_address_invalid[f tests/test_networks.py::test_address_invalid[foo.bar@exam\nple.com tests/test_networks.py::test_address_invalid[foobar] tests/test_networks.py::test_address_invalid[foobar tests/test_networks.py::test_address_invalid[@example.com] tests/test_networks.py::test_address_invalid[foobar@.example.com] tests/test_networks.py::test_address_invalid[foobar@.com] tests/test_networks.py::test_address_invalid[foo tests/test_networks.py::test_address_invalid[foo@bar@example.com] tests/test_networks.py::test_address_invalid[\n@example.com] tests/test_networks.py::test_address_invalid[\r@example.com] tests/test_networks.py::test_address_invalid[\x0c@example.com] tests/test_networks.py::test_address_invalid[ tests/test_networks.py::test_address_invalid[\x1f@example.com] tests/test_networks.py::test_address_invalid["@example.com0] tests/test_networks.py::test_address_invalid["@example.com1] tests/test_networks.py::test_address_invalid[,@example.com] tests/test_networks.py::test_email_str tests/test_networks.py::test_name_email